jacoco-maven-plugin使用

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


主要功能及详细使用

  1. 准备覆盖率数据:prepare-agent

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

    配置示例:

    xml 复制代码
    <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)。

    配置示例:

    xml 复制代码
    <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 的配置:

    xml 复制代码
    <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 目标可以设定代码覆盖率的阈值,如果不满足要求,构建会失败。这对于确保代码质量非常有用。

    配置示例:

    xml 复制代码
    <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. 跳过测试和报告生成

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

  • 跳过测试:

    bash 复制代码
    mvn clean install -DskipTests
  • 跳过 Jacoco 覆盖率报告:

    bash 复制代码
    mvn clean install -Djacoco.skip=true

2. 生成不同格式的报告

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

xml 复制代码
<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 中:

groovy 复制代码
stage('Test') {
    steps {
        sh 'mvn clean verify'
    }
}

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

5. 排除特定包或类

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

xml 复制代码
<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 并根据项目需求调整配置。

相关推荐
好看资源平台5 分钟前
Spring 全家桶使用教程 —— 后端开发从入门到精通
java·数据库·spring
Satan7128 分钟前
【Spring】Spring Aop基础入门
java·开发语言·jvm
这河里吗l16 分钟前
Java每日面试题(JVM)(day15)
java·开发语言·jvm·笔记·后端
white__ice19 分钟前
2024.9.27
java
robot_大菜鸟34 分钟前
Powerbi -l9-异常数据的处理
android·java·powerbi
江南一点雨36 分钟前
又一家培训机构即将倒闭!打工人讨薪无果,想报名的小伙伴擦亮眼睛~
java·程序员
Satan7121 小时前
【Java】JVM基本组成
java·开发语言·jvm
@月落1 小时前
获取douyin商品详情:API接口的力量
java·前端·数据库
hakesashou1 小时前
python命令行怎么换行
java·前端·python
yang-23071 小时前
ElasticSearch安装分词器与整合SpringBoot
java·spring boot·elasticsearch·jenkins