SpringBoot项目SonarQube分析代码覆盖率0%问题求助
Spring Boot项目SonarQube代码覆盖率显示0%的解决方案
核心问题分析
你的单元测试能正常运行,但SonarQube始终显示覆盖率为0%,结合pom配置来看,主要存在以下几个问题:
- Jacoco依赖冗余且版本冲突
- SonarQube未明确指定Jacoco报告路径
- 多测试框架混合导致Surefire执行异常
- Jacoco插件配置未与Sonar扫描流程正确衔接
分步修复方案
1. 移除冗余Jacoco依赖
Jacoco仅需作为Maven插件配置,不需要在<dependencies>中添加依赖项。删除以下代码:
<dependency> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.12</version> </dependency>
2. 统一Jacoco插件版本并优化配置
将Jacoco插件版本统一为稳定版(如0.8.12),确保prepare-agent和report阶段正确执行,覆盖测试过程并生成报告:
<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.12</version> <executions> <execution> <id>jacoco-prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>jacoco-report</id> <phase>test</phase> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin>
3. 配置SonarQube读取Jacoco报告
在<properties>中添加SonarQube识别Jacoco报告的必要属性:
<properties> <!-- 保留原有属性 --> <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin> <sonar.jacoco.reportPaths>${project.build.directory}/jacoco/jacoco.exec</sonar.jacoco.reportPaths> </properties>
4. 简化测试框架配置
你同时引入了JUnit4、TestNG和Spring Boot Test,容易导致Surefire插件无法正确识别测试类。建议统一使用Spring Boot Test(已集成JUnit5),删除以下冗余依赖:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.1.0</version> <scope>test</scope> </dependency>
同时更新Surefire插件到适配Java17的版本:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.2</version> </plugin>
5. 正确执行命令
使用以下连贯命令完成测试、覆盖率报告生成和Sonar扫描:
mvn clean test sonar:sonar
验证步骤
- 执行
mvn clean test后,检查target/jacoco目录下是否生成jacoco.exec文件 - 查看
target/site/jacoco下的HTML报告,确认本地覆盖率数据正常 - 刷新SonarQube页面,检查覆盖率是否更新
内容的提问来源于stack exchange,提问作者mylib
相关产品推荐
相关产品推荐

