build doLast无法在多模块构建中执行

时间:2018-12-06 16:58:09

标签: gradle build.gradle

我有一个多模块gradle构建,并且我试图汇总jacoco报告,但是我希望它在构建完成时发生,并且我不想将其添加到终端中gradle命令的末尾。以下是我如何配置build.gradle的代码段:

subprojects {
    do stuff...
}
task jacocoRootReport(type: JacocoReport, group: 'Coverage reports') {
    configure...
}
task build {
    dependsOn subprojects.build
    doLast {
        jacocoRootReport
    }
}

如果我在doLast中放入一个简单的println,它将进行打印,但是如果我在jacoco report任务中放入了println,则不会打印任何内容。 我也尝试过使用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
    }
}

1 个答案:

答案 0 :(得分:0)

我将构建任务更新为“取决于”而不是doLast。这就是我想要的。 如果有更好的方法来完成我想要的事情,请随时纠正我。

task build {
    dependsOn tasks.jacocoRootReport
}

我尝试使用build.finalizedBy(jacocoRootReport)并出现以下错误:

  

根项目中的未知属性“ build”