Gradle 使用TeamCity向SonarQube提供jacoco覆盖率报告,但报告显示覆盖率为0%

Gradle 使用TeamCity向SonarQube提供jacoco覆盖率报告,但报告显示覆盖率为0%,gradle,sonarqube,teamcity,code-coverage,jacoco,Gradle,Sonarqube,Teamcity,Code Coverage,Jacoco,我有一个gradle项目,在src/main/java中有一些代码,在src/test/java中有一些单元测试 下面是来自build.gradle的片段 apply plugin: "jacoco" sourceSets { main { java { srcDir 'src/main/java' } } } test { jacoco { append = false destinationFile = file("

我有一个gradle项目,在
src/main/java
中有一些代码,在
src/test/java
中有一些单元测试

下面是来自build.gradle的片段

apply plugin: "jacoco"

sourceSets {
    main {
        java { srcDir 'src/main/java' }
    }
}

test {
    jacoco {
        append = false
        destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
        classDumpDir = file("$buildDir/jacoco/classpathdumps")
    }
}

jacoco {
    toolVersion = "0.7.8"
}

jacocoTestReport {
    reports {
        xml.enabled false
        csv.enabled false
        html.destination "${buildDir}/reports/jacoco/jacocoHtml"
    }
}
在TeamCity上,我有两个步骤,第一个是带有命令的Gradle步骤
Gradle clean JacoTestReport build
,第二个步骤是带有以下参数的SonarQube runner:

-Dsonar.sources=%system.teamcity.build.checkoutDir%/src
-Dsonar.java.binaries=%system.teamcity.build.checkoutDir%/build/classes
-Dsonar.branch.name=%teamcity.build.branch%
-Dsonar.jacoco.reportPaths=%system.teamcity.build.checkoutDir%/build/jacoco/jacocoTest.exec

然而,在SonarQube仪表板上,我的项目仍然显示覆盖率0%。如果我将
jacoco
覆盖率报告正确地馈送至SonarQube(6.7版)

请告知我,如果您正在使用TeamCity jacoco integration for Gradle runner,覆盖率应自动恢复。确保在SonarQube Runner中提供了“二进制文件位置”。在这种情况下,生成日志将包含以下行:

 # before SonarQube start:
 -Dsonar.java.coveragePlugin=jacoco
 -Dsonar.jacoco.reportPath=/.../buildAgent/temp/buildTmp/JACOCO8457480821230827929coverage/jacoco.exec

 # while SonarQube is executed:
 Sensor JaCoCoSensor
 Analysing /.../buildAgent/temp/buildTmp/JACOCO8457480821230827929coverage/jacoco.exec
如果您想在Gradle脚本中使用JaCoCo插件,您应该在SonarQube Runner步骤中手动设置覆盖类型和数据位置

-Dsonar.java.coveragePlugin=jacoco
-Dsonar.jacoco.reportPaths=%system.teamcity.build.checkoutDir%/build/jacoco/jacocoTest.exec

因此,尝试添加“sonar.java.coveragePlugin”属性

您是否查看了SonarQube日志文件?@JeroenHeier我无法查看日志,因为我无法控制SonarQube服务器(它由另一个团队管理)。分析日志告诉您什么?你为什么不用声纳扫描器来扫描格雷德?SonarRunner已被弃用,如果我没记错的话,您无论如何都应该使用sonar scanner。@benzonico sonar Runner是TeamCity中的一个专用构建步骤。另外,SonarQube服务器的管理员防止任何本地分析结果直接推送到serverHI@linfar,我可以检查一下二进制文件的位置吗,它是编译类的位置还是插入指令的类的位置?@hydradon我从未在脱机模式下运行过JaCoCo。表示必须以初始编译类为目标,而不是插入指令。