【问题标题】:Jacoco code coverage for Sonarqube 8 using Gradle使用 Gradle 对 Sonarqube 8 的 Jacoco 代码覆盖率
【发布时间】:2020-07-18 17:46:33
【问题描述】:

代码覆盖率在仪表板上显示为 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.

google了半天,唯一真正解决这个问题的方法如下: Property 'sonar.jacoco.reportPath' is deprecated. Please use 'sonar.jacoco.reportPaths' instead

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

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

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

我有什么遗漏吗?

【问题讨论】:

  • 你知道sonar.coverage.jacoco.xmlReportPaths末尾缺少s吗?
  • @SimonSchrottner 在文档中 PathsPath 都被接受,无论哪种方式我都尝试过,但它们都不起作用
  • 如果你使用sonar.coverage.jacoco.xmlReportPaths,你不需要sonar.jacoco.reportPaht(s),只要你使用sonar.coverage.jacoco.xmlReportPaths而不是sonar.coverage.jacoco.xmlReportPath -docs.sonarqube.org/latest/analysis/coverage

标签: java docker gradle sonarqube jacoco


【解决方案1】:

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

xml.enabled 真

【讨论】:

    【解决方案2】:

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

    我没有使用 gradle sonar 插件,而是使用 Jenkin Job 的 -> Execute SonarQube Scanner 配置。

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

    gradle 中的以下代码将启用 xml 报告并生成默认名称为 jacocoTestReport.xml 的文件 雅可可测试报告 { 报告{ 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 中我无法看到覆盖率,而在其他项目中,覆盖率显示为 0.0%。

    因此,总而言之,SonarQube 无法查看您的 JaCoCo 报告文件。

    【讨论】:

      【解决方案3】:

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

      jacocoTestReport {
          reports {
              xml.required = true
          }
      }
      

      【讨论】:

      • 需要启用...你可以在这里做点什么:)
      猜你喜欢
      • 2018-11-13
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 2016-11-11
      • 2019-01-02
      • 2012-11-02
      • 2016-06-03
      相关资源
      最近更新 更多