当.execute()命令失败时,失败Gradle TaskAction

时间:2014-11-25 22:22:07

标签: error-handling gradle

在“.execute()”操作期间如何检索输出和错误,如果有错误则无法完成任务?是否会自动处理project.copy {...}和类似任务的错误?是否有可以使用的project.sync {...}或project.exec {...}等效?

class SomeTask extends DefaultTask {

    @TaskAction
    def translate() {
        def execCommand = "<SOME_COMMAND>"
        println 'Command\n' + execCommand
        println execCommand.execute().text
    }
}

运行任务时,它会发出一些错误,然后将其标记为成功。代码应该检测execute()命令何时失败并使整个任务失败。

Translated 6 files: 301 errors, 0 warnings

:base:someTask (Thread[main,5,main]) completed. Took 3.387 secs.

BUILD SUCCESSFUL

我还使用以下命令将STDOUT记录到信息日志中以便于访问(因此您只需添加-I即可查看日志)。有没有推荐的替代方案?

class MyPlugin implements Plugin<Project> {
    void apply(Project project) {
        project.with {
            logging.captureStandardOutput LogLevel.INFO
            ...

2 个答案:

答案 0 :(得分:1)

project.exec {...}可用于执行shell脚本。它的配置方式与Exec相同。请注意在将每个参数传递给args方法之前,需要将每个参数拆分为单个值。

class SomeTask extends DefaultTask {

    def otherFlags = "-n -E"

    @TaskAction
    def translate() {
        project.exec {
            executable "echo"
            args "-e"
            args otherFlags.split()
        }
    }
}

答案 1 :(得分:0)

而不是Groovy的String#execute,通常最好使用Gradle的project.exec {}(其配置方式与{{1}完全相同任务并允许重新路由标准输出/错误),如果命令返回非零退出代码,默认情况下将抛出异常。