SonarQube 7.9.2升级后,如何用jacoco.exec查看代码覆盖率?
解决SonarQube 7.9.2中使用JaCoCo .exec文件展示代码覆盖率的问题
我懂你现在的处境——升级到SonarQube 7.9.2后,原来依赖的sonar.jacoco.reportPaths属性被弃用了,但你还没生成JaCoCo的XML报告,而且项目是用Ant构建、JUnit做测试的。别慌,咱们可以通过把已有的jacoco.exec转换成Sonar需要的XML报告,再配置Sonar属性来解决,具体步骤如下:
1. 修改Ant构建脚本,添加JaCoCo XML报告生成任务
首先确认你的Ant脚本里已经引入了JaCoCo的任务,然后新增一个jacoco:report任务,用来将现有的.exec文件转换成XML格式的覆盖率报告。
给你个示例配置,记得替换成你项目的实际路径:
<!-- 先定义JaCoCo任务,替换成你的jacocoant.jar路径 --> <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml"> <classpath path="lib/jacocoant.jar"/> </taskdef> <!-- 生成JaCoCo XML报告的任务 --> <target name="generate-jacoco-xml"> <jacoco:report> <!-- 指定你的jacoco.exec文件所在路径 --> <executiondata> <file file="build/jacoco.exec"/> </executiondata> <!-- 配置项目结构:编译后的class文件和源代码路径 --> <structure name="你的项目名称"> <classfiles> <fileset dir="build/classes"/> <!-- 替换成编译后的class文件目录 --> </classfiles> <sourcefiles encoding="UTF-8"> <fileset dir="src/main/java"/> <!-- 替换成你的源代码目录 --> </sourcefiles> </structure> <!-- 指定输出报告,重点生成XML格式 --> <html destdir="build/reports/jacoco/html"/> <!-- 可选的HTML报告,方便本地查看 --> <xml destfile="build/reports/jacoco/jacoco.xml"/> <!-- 这是Sonar需要的XML报告 --> </jacoco:report> </target>
执行这个Ant任务:ant generate-jacoco-xml,就能在指定目录生成jacoco.xml了。
2. 配置SonarQube,指定XML报告路径
接下来,在你的Sonar配置文件(比如sonar-project.properties)里添加新的属性:
# 替换成你刚生成的jacoco.xml的实际路径 sonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/jacoco.xml
如果是用命令行执行Sonar扫描,也可以直接把这个参数传进去:
sonar-scanner -Dsonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/jacoco.xml
3. 一些要注意的细节
- 版本兼容:SonarQube 7.9.2建议搭配JaCoCo 0.8.4及以上版本,避免版本不匹配导致报告解析失败。
- 确保exec文件有效:要确认你的JUnit测试执行时确实生成了
jacoco.exec,如果没有,得检查Ant中JaCoCo的代理配置,保证测试运行时JaCoCo在收集覆盖率数据。 - 路径要准确:不管是class文件、源代码还是报告的路径,都要和你的项目结构完全对应,不然Sonar会找不到文件哦。
内容的提问来源于stack exchange,提问作者Aravind




