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

del*_*lor 5 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
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Ant*_*nit 5

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

我必须做的最小更改是添加:

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

并且报告是在build\reports\jacoco\test\jacocoTestReport.xml.


如果你真的需要定义你自己的任务,你可以像jacocoTestReport任务一样聚合源集:

sourceSets(project.extensions.getByType(SourceSetContainer::class.java).getByName("main")) 
Run Code Online (Sandbox Code Playgroud)

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

最终代码可能如下所示:

sourceSets(project.extensions.getByType(SourceSetContainer::class.java).getByName("main")) 
Run Code Online (Sandbox Code Playgroud)