gradle任务可以取决于另一个任务的失败吗?
例如,我有一个辅助任务,可以在浏览器中打开测试报告。我希望仅在任务“测试”失败时才显示报告,而不是像现在一样通过所有测试时才显示报告。
task viewTestReport(dependsOn: 'test') << {
def testReport = project.testReportDir.toString() + "/index.html"
"powershell ii \"$testReport\"".execute()
}
最佳答案
您可以尝试设置任务的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的用户指南in chapter 14.11 "Finalizer tasks"。不久,由于文档:
因此,您只需要使用TaskState检查完成任务的状态,如果失败,请执行所需的操作。
更新:
不幸的是,由于总是对所有任务执行配置,因此似乎无法创建一些自定义任务来设置标志以在脚本内显示报告。在执行阶段也是不可能的,因为如果预览运行的任务失败,则不会调用该任务。但是您可以根据需要执行以下操作,提供构建脚本参数,例如:
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)
在这种情况下,如果您要在测试任务中获取报告失败,则在调用任何gradle任务时,必须提供
-PshowReport
参数。例如,如果您致电:gradle test -PshowReport
然后如果测试任务失败,将显示报告,但是如果您调用它:
gradle test
在任何情况下都不会显示报告。