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

相关推荐
IT古董29 分钟前
第四章:大模型(LLM)】06.langchain原理-(3)LangChain Prompt 用法
java·人工智能·python
轻抚酸~4 小时前
小迪23年-32~40——java简单回顾
java·web安全
Sirius Wu5 小时前
Maven环境如何正确配置
java·maven
健康平安的活着6 小时前
java之 junit4单元测试Mockito的使用
java·开发语言·单元测试
Java小白程序员7 小时前
Spring Framework :IoC 容器的原理与实践
java·后端·spring
xuTao6677 小时前
Easy Rules 规则引擎详解
java·easy rules
m0_480502648 小时前
Rust 入门 KV存储HashMap (十七)
java·开发语言·rust
杨DaB8 小时前
【SpringBoot】Swagger 接口工具
java·spring boot·后端·restful·swagger
YA3338 小时前
java基础(九)sql基础及索引
java·开发语言·sql
桦说编程9 小时前
方法一定要有返回值 \ o /
java·后端·函数式编程