我有三个gradle任务:A,B和B2。它们以下列方式相互依赖:A< -B< -B2(意味着B取决于A,B2取决于B)。这是我的代码:
task A {
println "Exec A"
}
task B(dependsOn: A) << {
throw new StopExecutionException("skip this task") // this exception prevents the println, but doesn't change the TaskStatus of B
println "Exec B"
}
task B2(dependsOn: B) << {
println "Did work: " + B.getState().getDidWork();
println "Exec: " + B.getState().getExecuted();
println "Failure: " + B.getState().getFailure();
println "Skip message: " + B.getState().getSkipMessage();
println "Skipped: " + B.getState().getSkipped();
println "Exec B2"
}
当我执行此操作时(通过运行gralde -q B2
),我得到以下输出:
> gralde -q B2
Exec A
Did work: true
Exec: true
Failure: null
Skip message: null
Skipped: false
Exec B2
可以看出,虽然正确抛出了StopExecutionException,但TaskState的属性并没有改变。如何在任务中确定所有以前的任务是否完全执行?
答案 0 :(得分:2)
StopExecutionException
只是完成任务执行的快捷方式。如果抛出任务,任务不会失败,因为您可以在documentation中读取任务,也不会跳过任务。您可以抛出GradleException
以使任务失败,然后后续任务将能够检查结果。请注意,您需要更改B2以使其成为B的最终任务(请参阅here)或使用runAfter
或类似内容。