Gradle - StopExecutionException不会更改TaskStatus

时间:2014-10-03 11:41:54

标签: gradle

我有三个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的属性并没有改变。如何在任务中确定所有以前的任务是否完全执行?

1 个答案:

答案 0 :(得分:2)

StopExecutionException只是完成任务执行的快捷方式。如果抛出任务,任务不会失败,因为您可以在documentation中读取任务,也不会跳过任务。您可以抛出GradleException以使任务失败,然后后续任务将能够检查结果。请注意,您需要更改B2以使其成为B的最终任务(请参阅here)或使用runAfter或类似内容。