build议停止Gradle构build的方法
如何在检测到问题后停止Gradle构build? 我可以使用一个断言,抛出一个exception,做一个System.exit(坏主意),或者在Gradle中使用一个专用的函数(但我找不到一个)。 什么是Gradle的最佳方式(以及为什么?)。
我通常从org.gradle.api包中引发相关的exception,例如InvalidUserDataException ,当某人input了某些无效的内容时,或者GradleScriptException更常见的错误。 
 如果您想要停止当前的任务或动作,并转到下一个,则还可以引发StopActionException 
如果你想停止构build,扔:
 throw new GradleException('error occurred') 
或抛出上述exception的子类。 一些子类exception实际上只是失败了当前的任务,但继续构build。
目前还没有专门的方法,虽然已经有讨论join。
 推荐的停止Gradle构build的方法是引发exception。 由于Groovy没有检查exception,并且默认情况下Gradle不打印exceptiontypes,所以抛出exception并不重要。 在构build脚本中,经常使用GradleException,但Groovy断言也是合理的(取决于具体情况和受众)。 重要的是提供一个清晰的信息。 添加一个原因(如果可用)有助于debugging( --stacktrace )。 
  Gradle提供了专门的exceptiontypesStopExecutionException / StopActionException用于停止当前任务/任务操作,但继续生成。 
另一个选项,如果你没有任何能够赶上例外的愿望是调用ant失败的任务。 在我看来,读起来稍微容易些,而且你可以在不使用-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_yatesbuild议的那样抛出标准gradleexception来查看抛出什么exception。
抛出一个简单的GradleException在停止构build脚本中起作用。 这对检查所需的环境设置非常有用。
 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.') } 
这是一个代码片段,试图模拟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并暂停构build。 
注意:如果您的命令也写入errorOutput,则可能需要将其包含在错误日志中。