SonarQube代码覆盖率显示0%求助,已配置JaCoCo与Maven
SonarQube 代码覆盖率显示0%的排查与解决步骤
1. 先验证JaCoCo本地报告是否有效
首先排除JaCoCo本身未生成有效覆盖率数据的问题:
- 使用Jacoco CLI工具生成本地HTML报告,执行命令:
java -jar jacococli.jar report target/jacoco.exec --classfiles target/classes --sourcefiles src/main/java --html ./jacoco-local-report - 打开本地报告的
index.html:如果本地报告覆盖率也是0%,说明测试用例未执行或未命中代码,优先排查测试执行问题;如果本地报告有数据,说明是SonarQube读取数据的配置问题。
2. 检查Maven插件配置是否正确
确保Jacoco和SonarQube插件的执行顺序与配置无误:
<build> <plugins> <!-- Jacoco 插件:确保prepare-agent在test阶段前执行,生成覆盖率数据 --> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.11</version> <executions> <execution> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>jacoco-report</id> <phase>test</phase> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin> <!-- SonarQube 扫描插件 --> <plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>3.10.0.2594</version> </plugin> </plugins> </build>
3. 配置SonarQube读取Jacoco报告的参数
新版本SonarQube推荐使用XML报告而非.exec文件,在pom的properties中添加:
<properties> <!-- 指定Jacoco XML报告路径 --> <sonar.jacoco.xmlReportPaths>target/site/jacoco/jacoco.xml</sonar.jacoco.xmlReportPaths> <!-- 明确指定覆盖率插件为Jacoco --> <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin> <!-- 确保源代码目录配置正确 --> <sonar.sources>src/main/java</sonar.sources> <sonar.tests>src/test/java</sonar.tests> </properties>
4. 确保扫描流程正确
不要拆分执行命令,用连贯的命令完成构建、测试、扫描:
mvn clean verify sonar:sonar
clean:清理旧的构建文件verify:执行测试并生成Jacoco报告sonar:sonar:启动SonarQube扫描,此时能读取到刚生成的覆盖率数据
5. 排查其他常见问题
- 检查是否在命令中加入了
-DskipTests或-Dmaven.test.skip=true,这会导致测试不执行,覆盖率数据为空 - 确认SonarQube项目的「排除项」配置,是否误将需要统计覆盖率的类排除在外
- 检查类文件路径是否匹配:如果项目使用模块化或自定义classpath,可能导致Jacoco记录的类路径与SonarQube解析的不一致,可在SonarQube项目设置中调整源代码路径
内容的提问来源于stack exchange,提问作者Abhilash
相关产品推荐
相关产品推荐

