如何在 Gradle Kotlin DSL 中定义 Jacoco 报告聚合?
How to define Jacoco report aggregation in Gradle Kotlin DSL?
在GradleGroovy我用的是
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 结果汇总到根项目中的一份报告中。
官方文档中有答案https://docs.gradle.org/current/userguide/jacoco_plugin.html
tasks.jacocoTestReport {
reports {
xml.isEnabled = false
csv.isEnabled = false
html.destination = file("${buildDir}/jacocoHtml")
}
}
我建议配置和使用现有任务 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") })
}
在GradleGroovy我用的是
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 结果汇总到根项目中的一份报告中。
官方文档中有答案https://docs.gradle.org/current/userguide/jacoco_plugin.html
tasks.jacocoTestReport {
reports {
xml.isEnabled = false
csv.isEnabled = false
html.destination = file("${buildDir}/jacocoHtml")
}
}
我建议配置和使用现有任务 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") })
}