如何为 JaCoCo/SonarQube 配置 sonar.coverage.jacoco.xmlReportPaths?

How to configure sonar.coverage.jacoco.xmlReportPaths for JaCoCo/SonarQube?

SonarQube 7.7 对 Java 项目分析显示以下警告:

Property 'sonar.jacoco.reportPath' is deprecated (JaCoCo binary format). 'sonar.coverage.jacoco.xmlReportPaths' should be used instead (JaCoCo XML format).

基于Gradle的项目通过sonar-project.properties配置如下:

sonar.projectKey=MyExampleLib
sonar.projectName=MyExample Library
sonar.sources=src/main/java
sonar.jacoco.reportPath=build/jacoco/test.exec
sonar.junit.reportsPath=build/test-results/test
sonar.java.test.binaries=build/classes/test
sonar.java.binaries=build/classes/java/main
sonar.binaries=build/classes
sonar.projectVersion=$libVersion

SonarQube 服务器 URL 通过以下方式注入(否则你会遇到 "localhost:9000" 错误):

SonarQube 分析通过 Jenkins 和 JaCoCo plugin v.3.0.4 触发,作业配置如下:

我读到 report.xmlxmlReportPaths 捡到。我怎样才能生成它?

相关

您的构建似乎是基于 Gradle。在 gradle build

中使用 jacoco 和 sonarqube 插件会更容易
plugins {
    id "jacoco"
    id "org.sonarqube" version "2.8"
}

您不需要 sonar-project.properties,分析是从您的构建中配置的。您可以在 sonarqube 配置中自定义默认值

// in build.gradle
sonarqube {
    properties {
        property "sonar.exclusions", "**/*Generated.java"
    }
}

要启用覆盖,您需要配置 gradle 以生成 XML 报告

jacocoTestReport {
    reports {
        xml.enabled true
    }
}

然后 运行 和 gradle build jacocoTestReport sonarqube。可以找到更多详细信息here and in SonarScanner for Gradle doc

我们可以通过将 xml.enabled 值指定为 true 并在报告部分提供 [​​=16=] 来生成 XML 格式的 Jacoco 报告。

plugins {
      id "org.sonarqube" version "2.8"
}
    jacocoTestReport {
        group = "Reporting"
        reports {
            xml.enabled true
            csv.enabled false
            //to create coverage report in html
            html.destination file("${buildDir}/reports/coverage")
            //for XML
            xml.destination file("${buildDir}/reports/jacoco.xml")
        }
    }

SonarQube 属性也可以通过 build.gradle 文件进行配置。由于 sonar.jacoco.reportPathsonar.jacoco.reportPaths 是 7.7 声纳版本中的弃用属性,应将其替换为 sonar.coverage.jacoco.xmlReportPaths.

  • 通过 build.gradle
  • 配置 Sonarqube 属性
sonarqube {
    properties {
        property 'sonar.projectName', 'MyExample Library'
        property 'sonar.projectKey', 'MyExampleLib'
        property 'sonar.core.codeCoveragePlugin', 'jacoco'
        property 'sonar.coverage.jacoco.xmlReportPaths', "${project.buildDir}/reports/jacoco.xml"
    }
}

  • 如果您希望通过 sonar-project.properties 执行此操作,请将下面提到的已弃用属性更新为建议的属性。
sonar.jacoco.reportPath=build/reports/jacoco.xml

最后执行gradle jacocoTestReport sonarqube命令,生成SonarQube的${project.buildDir}/reports/jacoco.xml${project.buildDir}/jacoco/test.exec等jacoco测试报告文件