如何配置maven-surefire-plugin在无测试Maven模块生成JaCoCo报告
解决无测试用例Maven模块的JaCoCo覆盖率报告生成问题
你可以通过在父POM中配置maven-surefire-plugin和jacoco-maven-plugin,强制无测试用例的模块生成JaCoCo所需的执行数据和报告,无需添加空测试类。
核心配置方案
1. 配置maven-surefire-plugin
设置failIfNoTests为false,确保模块无测试用例时,插件仍执行test阶段,不会跳过JaCoCo的数据生成流程:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>${surefire.version}</version> <configuration> <failIfNoTests>false</failIfNoTests> </configuration> </plugin> </plugins> </build>
2. 配置jacoco-maven-plugin
绑定prepare-agent和report目标到test阶段,确保生成执行数据文件(即使是空文件)和覆盖率报告:
<build> <plugins> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>${jacoco.version}</version> <executions> <execution> <id>jacoco-prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>jacoco-report</id> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
3. 聚合报告配置(可选)
如果需要生成包含所有模块的聚合报告,在父模块或test-module中添加report-aggregate目标配置:
<build> <plugins> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>${jacoco.version}</version> <executions> <execution> <id>jacoco-aggregate-report</id> <phase>verify</phase> <goals> <goal>report-aggregate</goal> </goals> <configuration> <includes> <include>your.group.id:code-module</include> <include>your.group.id:test-module</include> </includes> </configuration> </execution> </executions> </plugin> </plugins> </build>
原理说明
failIfNoTests=false让surefire在无测试用例时不终止test阶段执行,确保JaCoCo的agent参数被注入JVM,生成空的jacoco.exec文件。- jacoco-maven-plugin检测到
jacoco.exec文件后,会基于模块的业务代码生成覆盖率报告(无测试时覆盖率为0%),该报告会被聚合报告正常纳入。
注意事项
- 确保父POM的配置被子模块继承(子模块未覆盖相关插件配置时默认继承)。
- 替换配置中的
${surefire.version}和${jacoco.version}为你项目使用的实际版本号。
内容的提问来源于stack exchange,提问作者neXus
相关产品推荐
相关产品推荐

