建议停止Gradle构建的方法

时间:2012-04-25 08:46:48

标签: groovy build gradle

如何在检测到问题后停止Gradle构建?我可以使用断言,抛出异常,做一个System.exit(坏主意),或者在Gradle中使用专用函数(但我找不到)。 Gradle的最佳方式是什么(为什么?)。

6 个答案:

答案 0 :(得分:106)

我通常会从org.gradle.api package中抛出相关的例外情况,例如InvalidUserDataException表示某人输入的内容无效,或GradleScriptException表示更常见的错误。

如果您想要停止当前任务或操作,然后转到下一个,您还可以抛出StopActionException

答案 1 :(得分:70)

如果你想停止构建,请抛出:

throw new GradleException('error occurred')

或抛出上述异常的子类。一些子类异常实际上只会使当前任务失败,而是继续构建。

答案 2 :(得分:22)

目前还没有专门的方法,尽管已经讨论过添加一个方法。

停止Gradle构建的推荐方法是抛出异常。由于Groovy没有检查异常,并且默认情况下Gradle不打印异常类型,因此抛出哪个异常并不重要。在构建脚本中,经常使用GradleException,但Groovy断言似乎也是合理的(取决于环境和受众)。重要的是提供明确的信息。添加原因(如果可用)有助于调试(--stacktrace)。

Gradle提供专用异常类型StopExecutionException / StopActionException,用于停止当前任务/任务操作,但继续构建。

答案 3 :(得分:15)

如果您以后不希望能够捕获异常,则另一个选择是调用ant fail任务。在我看来,它更容易阅读,您可以在不使用--stacktrace的情况下向用户发送一条好消息。

task (tarball, dependsOn: warAdmin) << {
    ant.fail('The sky is falling!!')
}

给你一条消息:

* What went wrong:
Execution failed for task ':tarball'.
> The sky is falling!!

可能你 可以 捕获这个(也许它会抛出ant的BuildException?)但是如果这是一个目标那么我就不会使用ant.fail。通过抛出标准的gradle异常,我可以很容易地看到要捕获的异常,如tim_yates建议的那样。

答案 4 :(得分:9)

抛出一个简单的GradleException可以停止构建脚本。这很适合 检查所需的环境设置。

GradleException('your message, why the script is stopped.')

示例:

if(null == System.getenv()['GRADLE_USER_HOME']) {
    throw new GradleException('Required GRADLE_USER_HOME environment variable not set.')
}

答案 5 :(得分:2)

这是一个代码片段,它试图模拟Gradle javac任务如何抛出错误:

task myCommand(type:Exec) {

    ... normal task setup ....

    ignoreExitValue true
    standardOutput = new ByteArrayOutputStream()
    ext.output = { standardOutput.toString() }
    doLast {
        if (execResult.exitValue) {
            logger.error(output())
            throw new TaskExecutionException( it,
                new Exception( "Command '${commandLine.join(' ')}' failed; "
                              + "see task output for details." )
            )
        }
    }
}

当命令返回0时,没有输出。任何其他值都将打印standardOutput并暂停构建。

注意:如果您的命令也写入errorOutput,您可能需要将其包含在错误日志中。