Answers:
我通常会从org.gradle.api
程序包中抛出相关的异常,例如InvalidUserDataException
,当有人输入了无效的内容时,或者GradleScriptException
是发生了更一般的错误时。
如果要停止当前任务或操作,然后继续执行下一个任务,则还可以抛出一个 StopActionException
require(something != whatever) { "No good!" }
与更冗长且更容易输入的ee相对if(something != whatever){ throw new GradleException("No good!") }
GradleScriptException
是,它需要第二个参数作为原因。
make
是rules
(任务)成功或失败。我曾经尝试过return false
-Gradle只是忽略了它并继续运行。
如果您以后不希望捕获异常,则另一个选择是调用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。我只是通过按照tim_yates的建议抛出标准gradle异常来轻松地发现要捕获的异常。
throw new GradleException("The sky is falling!!")
(Gradle 3.4.1)
这是一个代码片段,试图模拟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,则可能需要将其包括在错误日志中。