使用 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
}
}
仪表板上的代码覆盖率显示为 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
}
}