我有三个gradle任务:A,B和B2。它们以以下方式相互依赖:A
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的属性没有更改。如何确定一个任务中是否所有以前的任务都已完全执行?
最佳答案
StopExecutionException
只是完成任务执行的快捷方式。如果抛出该任务,则它不会失败,因为您可以在documentation中读取它,也不会跳过该任务。您可以抛出GradleException
来使任务失败,然后后续任务将能够检查结果。请注意,您将需要更改B2以使其成为B的终结任务(请参阅here)或使用runAfter
或类似的东西来玩。