StopExecutionException

StopExecutionException

我有三个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或类似的东西来玩。

08-24 22:30