使用 Gradle 的 Sonarqube 8 的 Jacoco 代码覆盖率

Jacoco code coverage for Sonarqube 8 using Gradle

仪表板上的代码覆盖率显示为 0%

build.gradle 文件

plugins {
    id "org.sonarqube" version "2.8"
    id "java"
    id "idea"
    id "jacoco"
}

jacoco {
    toolVersion = "0.8.5"
}

jacocoTestReport {
    reports {
        html.enabled true
        xml.enabled true
        xml.destination file("${buildDir}/reports/jacoco.xml")
    }
}

plugins.withType(JacocoPlugin) {
    tasks["test"].finalizedBy 'jacocoTestReport'
}

sonarqube {
    properties {
        property "sonar.java.coveragePlugin", "jacoco"
        property "sonar.host.url", "http://169.254.1.100:9000"
        property "sonar.coverage.jacoco.xmlReportPath", "${buildDir}/reports/jacoco.xml"
    }
}

repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    // https://mvnrepository.com/artifact/junit/junit
    testCompile 'junit:junit:4.12'

}

check.dependsOn jacocoTestReport

运行 这个命令

./gradlew build jacocoTestReport sonarqube

生成的 JacocoTestReport 具有正确的代码覆盖率

Sonarqube gradle 任务生成此日志

> Task :sonarqube
SonarScanner will require Java 11 to run starting in SonarQube 8.x
Property 'sonar.jacoco.reportPath' is no longer supported. Use JaCoCo's xml report and sonar-jacoco plugin.
Property 'sonar.jacoco.reportPaths' is no longer supported. Use JaCoCo's xml report and sonar-jacoco plugin.

谷歌了半天,唯一真正解决这个问题的方法如下:

这个答案here解释了双输出:

Property 'sonar.jacoco.reportPaths' is no longer supported. Use JaCoCo's xml report and sonar-jacoco plugin.

然而,这似乎没有被添加到 gradle 插件中,因为正在使用的插件是 2.8,发布时的最新版本。

有什么我遗漏的吗?

您必须启用 XML 报告 属性 为真。

xml.enabled 真

您的配置中的问题是 属性 名称的类型。它是 sonar.coverage.jacoco.xmlReportPaths 而不是 sonar.coverage.jacoco.xmlReportPath

我没有使用 gradle 声纳插件,而是使用 Jenkin Job 的 -> 执行 SonarQube 扫描仪配置。

默认情况下,Jacoco 仅生成 html 个文件,对于 SonarQube,我们需要 xmlReportPath。

下面 gradle 中的代码将启用 xml 报告并将生成默认名称为 jacocoTestReport.xml 的文件 jacocoTestReport { 报告{ xml.enabled 是的 } }

这会在 Jenkins 工作区的 /ws/build/reports/jacoco/test/jacocoTestReport.xml 位置生成以下文件以及 /ws/build/reports/jacoco/html 文件夹,其中包含覆盖率报告的所有 html 文件。可以通过访问位于 /ws/build/reports/jacoco/html/index.xml

的 index.html 文件来访问此报告

Jacoco xml 报告文件的路径将在下面提供 属性

sonar.coverage.jacoco.xmlReportPaths=<rootFolder>/build/reports/jacoco/test/jacocoTestReport.xml

这对我有用。

在此之前,我在 SonarQube 中看不到 Coverage,而在其他项目中,Coverage 显示为 0.0%。

所以,总而言之,SonarQube 无法看到您的 JaCoCo 报告文件。

为了扩展 qasanov 的答案,我不得不将其添加到我的 build.gradle 文件中,以便 JaCoCo 生成 XML 报告,然后自动获取该报告来自 SonarQube:

jacocoTestReport {
    reports {
        xml.required = true
    }
}