Jacoco 不生成 xml 文件

Posted

技术标签:

【中文标题】Jacoco 不生成 xml 文件【英文标题】:Jacoco does not generate xml file 【发布时间】:2020-09-20 06:30:31 【问题描述】:

我正在使用 gradle 与 kotlin 合作。现在我需要改进代码,我正在使用带有 jacoco 的 sonarqube。但我的覆盖率始终为 0.0%。 我的毕业典礼:

plugins 
    kotlin("jvm") version "1.3.70"
    id("org.sonarqube") version "2.8"
    jacoco
    `maven-publish`


repositories 
    mavenLocal()
    jcenter()      


sonarqube 
    properties 
        property("sonar.host.url", "http://localhost:9000")
        property("sonar.language", "kotlin")
        property("sonar.sourceEncoding", "UTF-8")
        property("sonar.projectName", "Commons.Pulsar")
        property("sonar.projectKey", "Aries.kt")
        property("sonar.projectVersion", "0.0.1")
        property("sonar.sources", "src/main/kotlin/")
        property("sonar.junit.reportPaths", "src/test/kotlin/")
        property("sonar.login", "admin")
        property("sonar.password", "admin")
        property("sonar.coverage.jacoco.xmlReportPaths", "build/jacoco/test/jacocoTestReport.xml")
    


java 
    withJavadocJar()
    withSourcesJar()


publishing 
    publications 
        create<MavenPublication>("mavenJava") 
            from(components["java"])
        
    


tasks 
    test 
        useJUnitPlatform()
        testLogging 
            events("passed", "skipped", "failed")
        
    
    jacocoTestReport 
        reports 
            xml.isEnabled = true
        
    

    compileKotlin 
        kotlinOptions.jvmTarget = "11"
    
    compileTestKotlin 
        kotlinOptions.jvmTarget = "11"
    

但我注意到没有创建 jacocoTestReport.xml。没有创建 xml。 有人可以帮忙吗?

【问题讨论】:

将 jacocoTestReport 块放在任务块之外是否有效? 【参考方案1】:

你不需要指定sonar.coverage.jacoco.xmlReportPaths属性,你只需要确保任务jacocoTestReportsonarqube目标之前执行。 sonarqube gradle 插件足够智能,可以根据 jacoco 报告检测配置。例如,我链接Junit Pioneer build configuration,我们也这样做。

一般来说,sonarqube gradle 插件非常强大,如果你使用所有带有 gradle 的构建,你的 sonarqube 块只需要看起来像这样

sonarqube 
    properties 
        property("sonar.host.url", "http://localhost:9000")
        property("sonar.sourceEncoding", "UTF-8")
        property("sonar.login", "admin")
        property("sonar.password", "admin")
    

因为它会从您的 gradle 配置中检测其余部分,如 sonarqube documentation 中所述

【讨论】:

以上是关于Jacoco 不生成 xml 文件的主要内容,如果未能解决你的问题,请参考以下文章

jacoco原理

Android - Jacoco 无法正确生成 xml 报告(已解决)

Jacoco 是不是记录单元测试持续时间?

在没有 Maven 或 Gradle 的情况下运行 jacoco 报告

使用Maven生成JaCoCo代码覆盖率报告

怎么合并Jacoco的Code Coverage Report