SonarQube 6.0配置多jacoco.exec路径后无代码覆盖显示求助
解决SonarQube 6.0中多Jacoco.exec文件无法显示覆盖率的问题
你遇到的问题核心在于:SonarQube 6.0版本的sonar.jacoco.reportPath属性并不支持逗号分隔的多个文件路径——这个多路径支持是从SonarQube 6.2版本开始,通过新属性sonar.jacoco.reportPaths才引入的。所以直接用逗号分隔多个路径,Sonar会无法识别,自然不会展示覆盖率数据。
针对你的场景,推荐以下几种可行的解决方案:
方案1:用Maven Jacoco插件合并多个exec文件
这是最适配你Maven项目的方式,通过Jacoco插件的merge目标,把所有分散的jacoco.exec合并成一个文件,再将这个合并后的文件路径配置给sonar.jacoco.reportPath。
在项目的pom.xml中添加Jacoco插件的合并配置:
<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.7</version> <!-- 选择与你的Jacoco版本兼容的版本 --> <executions> <execution> <id>merge-jacoco-reports</id> <phase>verify</phase> <!-- 在构建验证阶段执行合并 --> <goals> <goal>merge</goal> </goals> <configuration> <!-- 指定要合并的所有exec文件所在的目录及匹配规则 --> <fileSets> <fileSet> <directory>${project.basedir}</directory> <includes> <include>**/jacoco.exec</include> </includes> </fileSet> </fileSets> <!-- 合并后的输出文件路径 --> <destFile>${project.build.directory}/merged-jacoco.exec</destFile> </configuration> </execution> </executions> </plugin>
之后在你的Sonar配置中,将sonar.jacoco.reportPath设置为合并后的文件路径:
sonar.jacoco.reportPath=${project.build.directory}/merged-jacoco.exec
执行Maven构建时,插件会自动完成合并,Sonar就能正常读取覆盖率数据了。
方案2:通过Jacoco CLI工具合并文件
如果不想修改pom.xml,也可以在Jenkins任务中添加shell步骤,用Jacoco的命令行工具合并文件:
- 先下载对应版本的
jacococli.jar(可以和你项目中使用的Jacoco版本保持一致) - 执行合并命令:
java -jar jacococli.jar merge destfile=./target/merged-jacoco.exec execfiles=./module1/target/jacoco.exec,./module2/target/jacoco.exec
- 同样将Sonar的
sonar.jacoco.reportPath指向这个合并后的文件路径。
注意事项
- 确保所有
jacoco.exec文件的路径配置正确,相对路径要基于Jenkins任务的工作目录(项目根目录) - 合并后的文件要确保能被Sonar进程访问到,权限和路径都不能有问题
- 建议保持Jacoco插件版本与SonarQube 6.0的Jacoco插件兼容,避免版本不匹配导致的问题
内容的提问来源于stack exchange,提问作者Sreelakshmy Koonath
相关产品推荐
相关产品推荐

