【发布时间】:2018-12-06 16:58:08
【问题描述】:
我有一个多模块 gradle 构建,我正在尝试聚合 jacoco 报告,但我希望它在构建完成时发生,我不想将它添加到终端中 gradle 命令的末尾。下面是我如何配置 build.gradle 的 sn-p:
subprojects {
do stuff...
}
task jacocoRootReport(type: JacocoReport, group: 'Coverage reports') {
configure...
}
task build {
dependsOn subprojects.build
doLast {
jacocoRootReport
}
}
如果我在 doLast 中放置一个简单的 println,它会打印它,但如果我将 println 放置在 jacoco 报告任务中,则不会打印任何内容。 我也尝试过使用 build.finalizedBy ,这导致同样缺乏执行。我做错了什么? 在子任务 build.finalizedBy 内部工作正常,但在子任务外部似乎没有任何工作。
* 编辑 * 这是根报告的实际代码。 我尝试使用 build.finalizedBy 但它在根 build.gradle 中失败它仅适用于子项目
task jacocoRootReport(type: JacocoReport, group: 'Coverage reports') {
println 'start'
dependsOn = subprojects.test
additionalSourceDirs = files(subprojects.sourceSets.main.allSource.srcDirs)
sourceDirectories = files(subprojects.sourceSets.main.allSource.srcDirs)
classDirectories = files(subprojects.sourceSets.main.output)
executionData = files(subprojects.jacocoTestReport.executionData)
println 'reports'
reports {
html.enabled = true
html.destination "$rootDir/build/reports/coverage/coverge-index"
xml.enabled = false
csv.enabled = false
}
println 'onlyIf'
onlyIf = {
true
}
println 'doFirst'
doFirst {
executionData = files(executionData.findAll {
it.exists()
})
}
}
task build {
dependsOn subprojects.build
doLast {
jacocoRootReport
}
}
【问题讨论】:
-
你的
build任务的doLast块什么都不做:你只是得到了任务jacocoRootReport的引用,但你什么也不做,这就是它没有被执行的原因。 (相当于写project.tasks.getByName('jacocoRootReport'))。正确的方法是使用您提到的build.finalizedBy('jacocoRootReport'),它应该可以工作。你能提供你的jacocoRootReport任务定义的代码吗?
标签: gradle build.gradle