SonarQube无法显示Java Maven项目代码覆盖率问题求助
SonarQube显示单元测试覆盖率0%的排查与解决方法
以下是针对该问题的具体排查步骤和解决方案:
1. 确认Jacoco本地报告是否正常生成
执行mvn clean verify后,先检查target/site/jacoco目录下是否生成了HTML格式的覆盖率报告。打开index.html查看:
- 如果本地报告覆盖率也是0%,说明问题出在单元测试执行环节:查看
mvn verify日志,确认maven-surefire-plugin是否实际运行了JUnit测试,有没有测试类被跳过(比如类名未以Test结尾、缺少@Test注解);同时检查测试类的包路径是否与被测试类匹配,确保测试代码能正确覆盖目标类。 - 如果本地Jacoco报告覆盖率正常,再继续排查SonarQube的配置问题。
2. 确保SonarQube能正确识别Jacoco报告
SonarQube对Jacoco报告的读取路径有默认规则,若你修改了默认路径,需显式指定:
- 若使用二进制报告(
jacoco.exec),执行sonar:sonar时添加参数:-Dsonar.jacoco.reportPaths=target/jacoco.exec - 若使用XML格式报告(推荐,兼容性更好),添加参数:
-Dsonar.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml
3. 检查pom.xml中的插件配置是否正确
确保jacoco-maven-plugin和maven-surefire-plugin的配置无问题,以下是标准配置示例:
<build> <plugins> <!-- Maven Surefire Plugin:执行单元测试 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M7</version> <configuration> <includes> <include>**/*Test.java</include> </includes> </configuration> </plugin> <!-- Jacoco Plugin:收集并生成覆盖率报告 --> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.10</version> <executions> <!-- 预准备代理,在测试执行时收集覆盖率数据 --> <execution> <goals> <goal>prepare-agent</goal> </goals> </execution> <!-- 在verify阶段生成覆盖率报告 --> <execution> <id>jacoco-report</id> <phase>verify</phase> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
注意:prepare-agent目标必须绑定到test阶段(默认已绑定),否则测试执行时不会收集覆盖率数据。
4. 检查版本兼容性
确保jacoco-maven-plugin的版本与SonarQube服务器版本兼容:
- SonarQube 9.x及以上版本建议使用Jacoco 0.8.7及以上版本;
- 版本不匹配可能导致SonarQube无法解析Jacoco生成的报告文件。
5. 清理缓存后重新执行
旧缓存文件可能干扰报告解析,执行以下完整命令重新构建并提交到SonarQube:
mvn clean verify sonar:sonar -Dsonar.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml
内容的提问来源于stack exchange,提问作者Nipuni Madanayake
相关产品推荐
相关产品推荐

