当前位置: 首页 > article >正文

jacoco-maven-plugin使用

jacoco-maven-plugin 是用于分析 Java 代码覆盖率的工具,它可以集成到 Maven 构建生命周期中,为单元测试、集成测试生成详细的覆盖率报告。以下是全面的讲解,涵盖主要功能的详细用法、示例代码、常见的使用技巧和一些高阶功能。


主要功能及详细使用

  1. 准备覆盖率数据:prepare-agent
    通过 prepare-agent 目标,Jacoco 插件会在 JVM 中注入一个代理,以便在测试期间收集覆盖率数据。它是必须的步骤,用于在后续生成覆盖率报告。

    配置示例:

    <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.8.10</version>
        <executions>
            <execution>
                <id>prepare-agent</id>
                <goals>
                    <goal>prepare-agent</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    
    • 作用:确保 JVM 在运行测试时记录覆盖率数据。
    • 结果:生成 .exec 文件,存储了覆盖率信息,默认路径为 target/jacoco.exec
  2. 生成覆盖率报告:report
    report 目标会使用 prepare-agent 生成的 .exec 文件,结合源码和编译后的字节码,生成详细的覆盖率报告,支持多种格式(HTML、XML、CSV)。

    配置示例:

    <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.8.10</version>
        <executions>
            <execution>
                <id>report</id>
                <goals>
                    <goal>report</goal>
                </goals>
                <configuration>
                    <outputDirectory>${project.build.directory}/jacoco</outputDirectory>
                    <formats>
                        <format>HTML</format>
                        <format>XML</format>
                    </formats>
                </configuration>
                <phase>verify</phase>
            </execution>
        </executions>
    </plugin>
    
    • 作用:生成测试覆盖率的可视化报告。
    • 结果:在 target/site/jacoco 目录下生成 HTML 报告(index.html)及 XML 报告。
    • 常用格式
      • HTML:用于人类阅读的报告,包含图表和详细的覆盖率信息。
      • XML:可以用于集成工具(如 SonarQube)。
      • CSV:提供原始的覆盖率数据,用于自定义分析。
  3. 合并多模块的覆盖率报告:report-aggregate
    对于多模块项目,Jacoco 提供了 report-aggregate 目标,用于将多个模块的覆盖率数据合并生成一份报告。

    配置示例:

    在父 pom.xml 中添加 jacoco-maven-plugin 的配置:

    <build>
        <plugins>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.10</version>
                <executions>
                    <execution>
                        <id>report-aggregate</id>
                        <goals>
                            <goal>report-aggregate</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    
    • 作用:将子模块的测试覆盖率合并,生成一份聚合报告。
    • 结果:在父项目的 target/site/jacoco-aggregate/ 生成合并后的覆盖率报告。
  4. 设置覆盖率阈值:check
    check 目标可以设定代码覆盖率的阈值,如果不满足要求,构建会失败。这对于确保代码质量非常有用。

    配置示例:

    <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.8.10</version>
        <executions>
            <execution>
                <id>check</id>
                <goals>
                    <goal>check</goal>
                </goals>
                <configuration>
                    <rules>
                        <rule>
                            <element>BUNDLE</element>
                            <limits>
                                <limit>
                                    <counter>LINE</counter>
                                    <value>COVEREDRATIO</value>
                                    <minimum>0.80</minimum> <!-- 最低要求 80% -->
                                </limit>
                            </limits>
                        </rule>
                    </rules>
                </configuration>
            </execution>
        </executions>
    </plugin>
    
    • 作用:定义测试覆盖率的最低阈值标准。
    • 结果:当代码覆盖率低于 80% 时,构建失败。

详细使用流程

  1. 添加插件到 pom.xml
    根据需求,配置 prepare-agentreport 目标。

  2. 运行测试
    运行命令 mvn clean verify,Maven 会在运行测试时自动启动 Jacoco 代理并生成覆盖率数据。

  3. 查看报告
    target/site/jacoco/ 下查看生成的报告。可以直接打开 HTML 文件查看详细的覆盖率信息。


使用技巧和高阶功能

1. 跳过测试和报告生成

在某些情况下,你可能希望跳过测试或跳过生成覆盖率报告,可以通过以下方式:

  • 跳过测试:
    mvn clean install -DskipTests
    
  • 跳过 Jacoco 覆盖率报告:
    mvn clean install -Djacoco.skip=true
    

2. 生成不同格式的报告

根据需求生成不同格式的报告,可以同时配置多个格式,常见格式包括 HTML, XML, 和 CSV。例如:

<formats>
    <format>HTML</format>
    <format>XML</format>
</formats>
  • HTML:适合人类阅读,包含图表和详细信息。
  • XML:用于与 SonarQube 集成进行进一步代码分析。
  • CSV:可以将数据导入到自定义的分析工具中。

3. 多模块项目中的覆盖率合并

如果项目是多模块结构,可以使用 report-aggregate 目标合并各模块的覆盖率数据。确保父 pom.xml 中配置了该插件,并在子模块中收集到 .exec 文件。

4. 集成到 CI/CD 流程

在 Jenkins、GitLab CI 等 CI/CD 工具中,jacoco-maven-plugin 可用于自动化代码覆盖率报告生成并进行质量门槛检查。例如,在 Jenkins Pipeline 中:

stage('Test') {
    steps {
        sh 'mvn clean verify'
    }
}

stage('Jacoco Report') {
    steps {
        jacoco execPattern: '**/target/jacoco.exec'
    }
}

5. 排除特定包或类

如果有某些类或包不需要参与覆盖率分析,可以通过 excludes 来排除它们。例如:

<configuration>
    <excludes>
        <exclude>com/example/legacy/**</exclude>
    </excludes>
</configuration>
  • 作用:跳过对某些类或包的覆盖率统计,常用于第三方库或遗留代码。

总结

  1. 基本功能jacoco-maven-plugin 提供了 prepare-agentreport 两个核心目标,分别用于准备覆盖率数据和生成报告。
  2. 合并报告:多模块项目可以使用 report-aggregate 目标将多个模块的覆盖率数据合并。
  3. 覆盖率检查:通过 check 目标,可以设定覆盖率的最低要求,确保代码质量。
  4. 高级功能:可以与 CI/CD 工具集成、排除特定类、生成多种格式的报告等。

常用命令总结

  • mvn clean verify:运行测试并生成覆盖率报告。
  • mvn clean install -Djacoco.skip=true:跳过生成覆盖率报告。

通过这些配置和使用技巧,你可以轻松集成 Jacoco 并根据项目需求调整配置。


http://www.kler.cn/a/312691.html

相关文章:

  • WPF中MVVM工具包 CommunityToolkit.Mvvm
  • 推荐一个超漂亮ui的网页应用设计
  • Android 进入浏览器下载应用,下载的是bin文件无法安装,应为apk文件
  • C指针创建三维数组
  • C++开发基础之使用librabbitmq库实现RabbitMQ消息队列通信
  • docker基础:搭建centos7(详见B站泷羽sec)
  • Qt中文乱码解决
  • 动手学深度学习(pytorch土堆)-06损失函数与反向传播、模型训练、GPU训练
  • 零基础玩转实在Agent -- 基础篇|实在Agent研究
  • 算法leecode笔记
  • 基于PHP的电脑线上销售系统
  • 小米电视,无需U盘,直接通过ADB远程安装APK,很方便!
  • 【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL16
  • 修改状态的标准模版
  • 【移动端】Flutter与uni-app:全方位对比分析
  • MATLAB绘图:2.plot函数
  • vulnhub靶场 DC-3
  • axios二次封装
  • web基础—dvwa靶场(十二)JavaScript Attacks
  • 从数据到资产:企业数据治理经济价值实现的策略框架
  • Dubbo SPI源码
  • Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
  • 新媒体运营
  • 非守护线程会阻止JVM的终止吗
  • 大联大诠鼎集团推出基于联咏科技、思特威和TDK产品的电子防抖(EIS)摄像头方案
  • 面试复盘与 AI 大模型学习