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

多模块Maven项目Jacoco配置异常:子模块报告缺失自身覆盖率

多模块Maven项目Jacoco代码覆盖率异常排查方案

项目结构

  • ABC
    • module1
  • DEF
    • module1
    • module2
    • module3
    • pom.xml

Jacoco配置(仅DEF父pom)

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.8</version>
    <executions>
        <execution>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>report</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>report-aggregate</goal>
            </goals>
            <configuration>
             <outputDirectory>${project.basedir}/target/reports</outputDirectory>
            </configuration>
            </execution>
    </executions>
</plugin>

异常现象

DEF下的module1生成的覆盖率报告不包含自身代码数据,反而显示module2、module3的覆盖率;同时每个子模块都会单独生成报告。

排查与解决思路

  1. 解决模块命名冲突
    DEF和ABC下都存在module1,Maven依赖解析或Jacoco的.exec执行文件可能因重名出现覆盖、混淆。建议给DEF下的module1重命名(例如def-module1),消除跨项目的模块名重复问题。

  2. 调整插件配置范围
    当前在DEF父pom直接配置插件,会导致所有子模块继承并执行完整插件逻辑,既生成单独报告又触发聚合操作,容易造成数据混乱。可以将基础配置放在<pluginManagement>中让子模块继承prepare-agent,仅在父模块单独绑定report-aggregate目标:

    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.8</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
    
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>report-aggregate</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>report-aggregate</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.basedir}/target/reports</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
    
  3. 清理旧数据文件
    执行mvn clean彻底清除各模块target目录下的.exec、编译后的.class等文件,避免旧数据干扰新的覆盖率统计,之后重新执行mvn verify生成报告。

  4. 验证子模块测试执行情况
    执行mvn test -pl DEF/module1查看测试日志,确认DEF的module1测试用例是否正常运行。如果测试未执行,自然不会生成对应的覆盖率数据。

  5. 明确聚合报告的数据源范围
    在report-aggregate的配置中指定需要聚合的模块,避免数据范围错误:

    <configuration>
        <outputDirectory>${project.basedir}/target/reports</outputDirectory>
        <includes>
            <include>**/DEF/module1/**</include>
            <include>**/DEF/module2/**</include>
            <include>**/DEF/module3/**</include>
        </includes>
    </configuration>
    

内容的提问来源于stack exchange,提问作者Lokesh Pandey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:16:15