You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动