SonarQube 6.7.7通过Sonar Scanner 4.6.2上传后无法显示代码覆盖率问题求助
解决SonarQube 6.7.7无法显示Jacoco代码覆盖率的问题
针对你遇到的上传覆盖率报告后SonarQube仪表板无数据的情况,结合你的环境(SonarQube 6.7.7 + Sonar Scanner 4.6.2),我整理了几个关键排查和修复步骤:
1. 优先修正报告路径配置
你的配置里sonar.coverage.jacoco.xmlReportPaths=/target/site/jacoco/jacoco.xml用了绝对路径,这大概率是核心问题。Sonar Scanner是在项目根目录执行的,绝对路径会去系统根目录下找/target,而非项目内部的target目录。
修改为相对路径:
sonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml
如果改用jacoco.exec格式,同样把路径改成相对路径target/jacoco.exec,并取消sonar.jacoco.reportPaths的注释。
2. 确认Jacoco报告已正确生成
在运行Sonar Scanner前,先手动验证报告文件:
- 执行
ls target/site/jacoco/jacoco.xml(Linux/macOS)或直接查看Windows文件资源管理器,确认报告存在且内容正常(不是空文件)。 - 如果报告不存在,说明你的构建流程(比如
mvn clean test jacoco:report)没有正确生成Jacoco报告,先确保构建步骤能产出有效的覆盖率文件。
3. 检查SonarQube插件兼容性
SonarQube 6.7.7是较老的LTS版本,需要确认:
- SonarQube后台已安装并启用Jacoco插件(在「Administration > Marketplace」中检查),且插件版本与SonarQube 6.7.7兼容。
- Sonar Scanner 4.6.2与SonarQube 6.7.7的版本匹配(官方文档显示Scanner 4.x兼容SonarQube 6.7+,若仍有问题可尝试降级到Scanner 3.x)。
4. 补充测试报告配置
覆盖率数据依赖单元测试的执行结果,建议取消测试报告路径的注释,让Sonar能关联测试用例数据:
sonar.junit.reportsPath=target/surefire-reports sonar.surefire.reportsPath=target/surefire-reports
这两个属性在6.7.7版本中可同时配置,确保Sonar能识别测试执行情况,进而正确关联覆盖率数据。
5. 分析Sonar Scanner的Verbose日志
你已开启sonar.verbose=true,执行Scanner时重点查看日志:
- 搜索「Jacoco」关键词,确认是否有「Reading report from...」的日志,验证Sonar是否成功找到报告文件。
- 如果出现「Failed to read coverage report」或「No coverage information will be saved」的提示,根据提示进一步排查(比如文件损坏、权限不足)。
6. 检查文件权限
如果在CI/CD环境运行Sonar Scanner,确保执行进程对target/site/jacoco/目录及文件有读取权限,避免因权限问题导致Sonar无法加载报告。
内容的提问来源于stack exchange,提问作者bentoi
相关产品推荐
相关产品推荐

