多模块Java项目中JaCoCo集成测试报告跨模块代码覆盖率统计方案问询
多模块Maven项目JaCoCo跨模块集成测试覆盖率配置
你当前的场景不需要做全模块测试报告合并,只要配置A模块在生成覆盖率报告时纳入B、C模块的编译产物和源码即可,具体配置步骤如下:
1. 父pom.xml 全局配置
首先在父pom中统一JaCoCo版本,避免各子模块版本不一致导致的统计异常:
<properties> <jacoco.version>0.8.10</jacoco.version> </properties> <build> <pluginManagement> <plugins> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>${jacoco.version}</version> <configuration> <!-- 避免测试执行时跳过覆盖率采集 --> <skip>false</skip> </configuration> </plugin> </plugins> </pluginManagement> </build>
同时确保A模块的pom中已经引入B、C模块的依赖,这个是前置条件,你应该已经配置过了。
2. 子模块B、C配置
B、C模块不需要额外添加JaCoCo相关配置,只要保证正常编译输出class文件即可,不需要执行单测。
3. 子模块A核心配置
在A模块的pom.xml中添加JaCoCo插件的完整配置,指定测试执行时采集覆盖率,生成报告时包含B、C的代码:
<build> <plugins> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <executions> <!-- 测试执行前启动覆盖率采集代理 --> <execution> <id>jacoco-prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> <configuration> <!-- 覆盖率执行数据存储路径,默认就是这个,可以不写 --> <destFile>${project.build.directory}/jacoco.exec</destFile> </configuration> </execution> <!-- 测试执行完成后生成覆盖率报告 --> <execution> <id>jacoco-generate-report</id> <phase>test</phase> <goals> <goal>report</goal> </goals> <configuration> <!-- 指定采集到的执行数据文件 --> <dataFile>${project.build.directory}/jacoco.exec</dataFile> <!-- 配置要纳入统计的包路径,替换为你自己的项目包路径 --> <includes> <include>com/yourcompany/modulea/**/*</include> <include>com/yourcompany/moduleb/**/*</include> <include>com/yourcompany/modulec/**/*</include> </includes> <!-- 配置B、C模块的源码路径,用于报告中关联展示源码覆盖情况 --> <sourceSets> <sourceSet> <directory>${project.parent.basedir}/module-b/src/main/java</directory> </sourceSet> <sourceSet> <directory>${project.parent.basedir}/module-c/src/main/java</directory> </sourceSet> <!-- A模块自身的源码默认会包含,可以不用额外加 --> </sourceSets> </configuration> </execution> </executions> </plugin> </plugins> </build>
注意把上面的包路径和模块目录名替换成你项目的实际值。
执行命令
在项目根目录执行以下命令即可生成覆盖三个模块的集成测试覆盖率报告:
mvn -pl module-a clean test jacoco:report
生成的报告路径为module-a/target/site/jacoco/index.html,打开即可查看所有被A模块集成测试覆盖到的B、C模块代码的覆盖率统计。
异常排查
- 若报告中看不到B、C模块的覆盖率,首先检查
<includes>中的包路径是否正确,路径分隔符用/而不是. - 确认B、C模块已经正常编译,class文件存在且和A模块依赖的版本一致
- 确保所有模块使用的JaCoCo版本完全一致,不要在子模块中单独指定不同的版本号
内容的提问来源于stack exchange,提问作者user3499994
相关产品推荐
相关产品推荐

