Gradle 取决于失败的梯度任务

Gradle 取决于失败的梯度任务,gradle,Gradle,一项渐进式任务能否依赖于另一项任务的失败 例如,我有一个辅助任务,可以在浏览器中打开测试报告。我希望报告仅在任务“测试”失败时显示,而不是像现在这样在所有测试都通过时显示 task viewTestReport(dependsOn: 'test') << { def testReport = project.testReportDir.toString() + "/index.html" "powershell ii \"$testReport\"".execute(

一项渐进式任务能否依赖于另一项任务的失败

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

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

task viewTestReport(dependsOn:'test')您可以尝试设置任务的
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 test

在任何情况下都不会显示任何报告。

这与您描述的一样有效,但是
gradle taskY
不会执行
taskX
,而是
gradle taskX
在出现故障时执行
taskY
。在我的示例中:
gradle viewTestReport
不执行
test
gradle test
将在失败时执行
viewTestReport
。我要的是相反的。@cheezsteak我有你想要的。不幸的是,唯一可行的方法是提供构建脚本参数并直接使用测试任务。在这种情况下,您可以在需要时使用ReportShowOnDemand运行测试。
gradle test -PshowReport
gradle test