gradle任务是否可以依赖于其他任务的失败?
例如,我有一个辅助任务,可以在浏览器中打开测试报告。我希望报告仅在任务“测试”失败时出现,而不是在所有测试都像现在一样通过时出现。
task viewTestReport(dependsOn: 'test') << {
def testReport = project.testReportDir.toString() + "/index.html"
"powershell ii \"$testReport\"".execute()
}
答案 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
无论如何都不会显示任何报告。