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

相关推荐
懒羊羊不懒@1 分钟前
Java基础语法—最小单位、及注释
java·c语言·开发语言·数据结构·学习·算法
ss2735 分钟前
手写Spring第4弹: Spring框架进化论:15年技术变迁:从XML配置到响应式编程的演进之路
xml·java·开发语言·后端·spring
DokiDoki之父17 分钟前
MyBatis—增删查改操作
java·spring boot·mybatis
兩尛34 分钟前
Spring面试
java·spring·面试
Java中文社群41 分钟前
服务器被攻击!原因竟然是他?真没想到...
java·后端
Full Stack Developme1 小时前
java.nio 包详解
java·python·nio
零千叶1 小时前
【面试】Java JVM 调优面试手册
java·开发语言·jvm
代码充电宝1 小时前
LeetCode 算法题【简单】290. 单词规律
java·算法·leetcode·职场和发展·哈希表
li3714908901 小时前
nginx报400bad request 请求头过大异常处理
java·运维·nginx
摇滚侠1 小时前
Spring Boot 项目, idea 控制台日志设置彩色
java·spring boot·intellij-idea