如何在检测到问题后停止Gradle构建?我可以使用断言,抛出异常,做一个System.exit(坏主意),或者在Gradle中使用专用函数(但我找不到)。 Gradle的最佳方式是什么(为什么?)。
答案 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,您可能需要将其包含在错误日志中。