Groovy 停止渐变生成的推荐方法

Groovy 停止渐变生成的推荐方法,groovy,build,gradle,Groovy,Build,Gradle,检测到问题后,如何停止Gradle构建?我可以使用断言、抛出异常、执行System.exit(坏主意),或者在Gradle中使用专用函数(但我找不到)。Gradle的最佳方法是什么(为什么?)。我通常从中抛出相关的异常,例如,当某人输入了无效的内容时,或者对于更一般的错误 如果要停止当前任务或操作,并继续执行下一个任务或操作,还可以抛出一个当前没有专用方法,尽管已经讨论过添加方法 建议停止Gradle构建的方法是抛出异常。由于Groovy没有检查过的异常,并且Gradle默认情况下不打印异常类型

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

我通常从中抛出相关的异常,例如,当某人输入了无效的内容时,或者对于更一般的错误


如果要停止当前任务或操作,并继续执行下一个任务或操作,还可以抛出一个

当前没有专用方法,尽管已经讨论过添加方法

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


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

如果要停止生成,请抛出:

throw new GradleException('error occurred')

或者抛出上述异常的子类。有些子类异常实际上只会使当前任务失败,但会继续生成。

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

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

可能您可以捕捉到这一点(可能会抛出ant的BuildException?),但如果这是一个目标,那么我不会使用ant.fail。我只是想按照tim_yates的建议,通过抛出标准的GradleException来轻松查看要捕获的异常。

抛出一个简单的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.')
}

下面是一段代码片段,试图模拟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,您可能需要将其包含在错误日志中。

如何设置它?调用它?只需调用ant.fail(‘您选择的消息’)无设置要求。它的输出似乎与使用
抛出新的GradleException(“天塌下来了!!”)
(Gradle 3.4.1)@mgaert相同。我似乎记得4年前我写这篇文章时,打印的消息确实有所不同(但那是一段很长的时间,我不想弄清楚当时的版本是什么并进行检查)。除此之外,IMHO ant.fail更清楚地传达了完全停止构建的意图,而抛出的异常读起来可能会被捕获和处理。如果任务未成功执行,也可以使用。(这是正确的,根据Gealle 1.11文档,我不确定什么时候介绍它。)这里有什么好的语法选项吗?请考虑KOTLIN的前提条件语法:<代码>要求(某物!=任何){“不好”} /<代码>而不是更冗长和类型EE(代码)>如果(某物!=){扔新的GealLeExebug(“不好!”)}GradleScriptException的可怕之处在于,它需要第二个参数作为原因……当然,我们避免说这是“通过异常编程”?!我曾经用这种方式编写过遗留代码,维护它是一件令人恐惧的事情……在过去,
make
的理念是
规则(task-s)成功或失败。我曾经尝试过
返回false
——Gradle只是忽略了它,继续运行。
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." )
            )
        }
    }
}