如何在Gradle Kotlin DSL中定义Jacoco报告聚合?

时间:2018-11-28 14:07:25

标签: gradle jacoco gradle-kotlin-dsl

在我使用的Gradle Groovy中

task jacocoRootReport(type: JacocoReport) {
  dependsOn = subprojects.test

  subprojects.each {
    sourceSets it.sourceSets.main
  }

  executionData.from fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec")

  reports {
    html.enabled = true
    xml.enabled = true
    csv.enabled = false
  }
}

但是我不知道如何将其转换为Kotlin DSL,这样子项目的Jacoco结果将被汇总到根项目中的一个报告中。

2 个答案:

答案 0 :(得分:2)

我建议配置和使用现有任务jacocoTestReport,因为它已经预定义了源集。

我要做的最小更改是添加:

tasks.jacocoTestReport {
    reports {
        xml.isEnabled = true
    }
    dependsOn(allprojects.map { it.tasks.named<Test>("test") })
}

并且该报告是在build\reports\jacoco\test\jacocoTestReport.xml中生成的。


如果您确实需要定义自己的任务,则可以按照jacocoTestReport任务的相同方式来聚合源集:

sourceSets(project.extensions.getByType(SourceSetContainer::class.java).getByName("main")) 

(来自gradle-6.2\src\jacoco\org\gradle\testing\jacoco\plugins\JacocoPlugin.java#addDefaultReportTask

最终代码如下:

tasks.register<JacocoReport>("codeCoverageReport") {

    executionData(fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec"))

    sourceSets(project.extensions.getByType(SourceSetContainer::class.java).getByName("main"))

    reports {
        xml.isEnabled = true
        xml.destination = File("${buildDir}/reports/jacoco/report.xml")
        html.isEnabled = false
        csv.isEnabled = false
    }

    dependsOn(allprojects.map { it.tasks.named<Test>("test") })
}

答案 1 :(得分:1)

官方文档https://docs.gradle.org/current/userguide/jacoco_plugin.html中有答案

tasks.jacocoTestReport {
    reports {
        xml.isEnabled = false
        csv.isEnabled = false
        html.destination = file("${buildDir}/jacocoHtml")
    }
}