You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot多模块项目能否用jacoco:report生成覆盖率报告及配置方法

问题解答

能否直接用mvn clean test jacoco:report生成跨模块覆盖率报告?

不能直接用该命令生成包含portal-jup-biz主代码的覆盖率报告。因为jacoco:report是单模块目标,默认只会统计执行命令所在模块的代码覆盖率——如果在根路径执行,它只会处理无业务代码的根模块;如果在portal-jup-test模块执行,只会统计portal-jup-test自身的代码,不会包含portal-jup-biz的覆盖率数据。

要让jacoco:report生成包含主代码的聚合覆盖率报告,需要通过pom配置显式关联portal-jup-biz的类文件和覆盖率数据,具体配置步骤如下:


具体配置步骤

1. 根模块(portal-jup/pom.xml)配置全局Jacoco属性与插件管理

在根pom中定义Jacoco版本、数据存储路径,并通过pluginManagement统一管理插件配置,让子模块继承:

<project>
    <!-- 全局属性定义 -->
    <properties>
        <jacoco.version>0.8.10</jacoco.version>
        <!-- 覆盖率数据文件存储目录 -->
        <jacoco.data.dir>${project.build.directory}/jacoco</jacoco.data.dir>
    </properties>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>${jacoco.version}</version>
                    <executions>
                        <!-- 所有子模块默认执行prepare-agent,生成覆盖率数据 -->
                        <execution>
                            <id>default-prepare-agent</id>
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                            <configuration>
                                <destFile>${jacoco.data.dir}/jacoco.exec</destFile>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

2. 业务模块(portal-jup-biz/pom.xml)配置

只需继承根pom的配置即可,无需额外修改——测试时会自动生成自身的覆盖率数据文件:

<project>
    <parent>
        <groupId>你的项目GroupId</groupId>
        <artifactId>portal-jup</artifactId>
        <version>你的项目版本</version>
    </parent>

    <artifactId>portal-jup-biz</artifactId>

    <!-- 依赖、其他配置保持原有内容即可 -->
</project>

3. 测试模块(portal-jup-test/pom.xml)配置聚合报告

在测试模块中扩展Jacoco插件,配置report目标,显式引入portal-jup-biz的类文件和覆盖率数据:

<project>
    <parent>
        <groupId>你的项目GroupId</groupId>
        <artifactId>portal-jup</artifactId>
        <version>你的项目版本</version>
    </parent>

    <artifactId>portal-jup-test</artifactId>

    <dependencies>
        <!-- 引入业务模块依赖,确保测试能调用主代码 -->
        <dependency>
            <groupId>你的项目GroupId</groupId>
            <artifactId>portal-jup-biz</artifactId>
            <version>你的项目版本</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <executions>
                    <!-- 保留prepare-agent,生成测试模块自身的覆盖率数据 -->
                    <execution>
                        <id>default-prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                        <configuration>
                            <destFile>${jacoco.data.dir}/jacoco-test.exec</destFile>
                        </configuration>
                    </execution>
                    <!-- 配置report目标,聚合业务模块与测试模块的覆盖率 -->
                    <execution>
                        <id>default-report</id>
                        <phase>test</phase> <!-- 绑定到test阶段,执行测试后自动生成报告 -->
                        <goals>
                            <goal>report</goal>
                        </goals>
                        <configuration>
                            <!-- 指定要聚合的覆盖率数据文件 -->
                            <dataFiles>
                                <dataFile>${project.parent.basedir}/portal-jup-biz/${jacoco.data.dir}/jacoco.exec</dataFile>
                                <dataFile>${jacoco.data.dir}/jacoco-test.exec</dataFile>
                            </dataFiles>
                            <!-- 指定要统计的类文件来源 -->
                            <classFiles>
                                <classFile>${project.parent.basedir}/portal-jup-biz/target/classes</classFile>
                                <classFile>${project.build.directory}/classes</classFile>
                            </classFiles>
                            <!-- 报告输出路径(可选,默认是target/site/jacoco) -->
                            <outputDirectory>${project.build.directory}/site/jacoco</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

执行命令生成报告

配置完成后,执行以下任一命令即可生成聚合覆盖率报告:

  1. 自动生成报告:在根路径执行 mvn clean test,测试完成后会自动生成报告,路径为portal-jup/portal-jup-test/target/site/jacoco/index.html
  2. 单独生成报告:若已执行过测试(已有覆盖率数据文件),可在根路径执行 mvn jacoco:report,同样会生成上述路径的报告

内容的提问来源于stack exchange,提问作者Min Chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 22:29:58