如何解决Scala项目SonarQube代码覆盖率报告读取失败问题
错误原因
你的报错核心是两个配置问题:
sonar.scala.coverage.reportPaths配置指向了目录而非具体的覆盖率报告文件,SonarQube的Scala覆盖率传感器需要读取明确的报告文件路径- 执行Sonar扫描前没有提前生成对应格式的覆盖率报告,导致目标路径不存在
修复步骤
- 优先选择Scoverage作为Scala项目覆盖率工具(SonarQube 7.9对Scala+Jacoco的兼容性较差),首先在pom.xml中添加scoverage-maven-plugin插件配置,确保可以生成scoverage格式的xml报告
- 修正pom中的Sonar相关配置:
把原配置
改为具体的报告文件路径,单模块项目参考配置如下:<sonar.scala.coverage.reportPaths>${project.basedir}/ds-rfds/target</sonar.scala.coverage.reportPaths>
多模块项目需调整为对应子模块的报告路径,避免多写多余的目录层级<sonar.scala.coverage.reportPaths>${project.basedir}/target/scoverage.xml</sonar.scala.coverage.reportPaths> - 调整TeamCity的构建命令,确保先执行测试和覆盖率报告生成,再执行Sonar扫描,调整后的命令参考:
scoverage:report org.jacoco:jacoco-maven-plugin:prepare-agent -U sonar:sonar - 如需继续使用Jacoco生成覆盖率,删除
sonar.scala.coverage.reportPaths配置,新增Jacoco报告路径配置:
同时调整构建命令,先执行Jacoco报告生成:<sonar.coverage.jacoco.xmlReportPaths>${project.basedir}/target/site/jacoco/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>org.jacoco:jacoco-maven-plugin:prepare-agent test jacoco:report -U sonar:sonar - 可在TeamCity构建步骤中新增临时的目录检查命令,执行
ls -la target/确认报告文件实际生成路径,避免相对路径配置错误
内容的提问来源于stack exchange,提问作者Priya
相关产品推荐
相关产品推荐

