Gradle任务取决于失败

时间:2015-10-22 15:51:17

标签: gradle

gradle任务是否可以依赖于其他任务的失败?

例如,我有一个辅助任务,可以在浏览器中打开测试报告。我希望报告仅在任务“测试”失败时出现,而不是在所有测试都像现在一样通过时出现。

task viewTestReport(dependsOn: 'test') << {
    def testReport = project.testReportDir.toString() + "/index.html"
    "powershell ii \"$testReport\"".execute()
}

1 个答案:

答案 0 :(得分:4)

您可以尝试设置任务的null属性,例如:

{{$code->reward ? $code->reward->title : ''}}

您可以找到gradle用户指南in chapter 14.11 "Finalizer tasks"的说明。不久,由于文档:

  

即使最终任务失败,也会执行终结器任务。

因此,您只需要使用TaskState检查已完成任务的状态,如果失败,请执行您想要的操作。

<强>更新 不幸的是,因为总是对所有任务执行配置,所以似乎无法创建一些自定义任务来设置标志以在脚本中显示报告。在执行阶段,也不可能,因为如果预先运行的任务失败,则不会调用任务。但是你可以做,你想要的,提供构建脚本参数,如:

finilizedBy

在这种情况下,如果要使测试任务中的报告失败,则必须提供task taskX << { throw new GradleException('This task fails!'); } task taskY << { if (taskX.state.failure != null) { //here is what shoud be executed if taskX fails println 'taskX was failed!' } } taskX.finalizedBy taskY 参数,同时调用任何gradle任务。例如,如果您致电:

task viewTestReport << {
    if (project.hasProperty("showReport") && test.state.failure != null) {
        //here is what shoud be executed on taskX fail
        println 'test was failed!'
    }
}
test.finalizedBy(viewTestReport)

然后报告将显示测试任务是否失败,但是如果你调用它:

-PshowReport

无论如何都不会显示任何报告。