Gradle exec任务返回非零退出值并使构建失败,但我希望不会失败而是执行另一个任务

时间:2015-12-12 00:37:12

标签: gradle

我有一个以默认方式设置的exec任务,例如:

task myTask(type:Exec) {

    workingDir '.'

    commandLine './myscript.sh'

    doLast {
        if(execResult == 0) {
           //one thing
        } else {
           //another thing
        }
    }
}

但遗憾的是,当脚本抛出错误时,它永远不会执行doLast块。相反,它会跳过它并使用

使整个构建失败
  

任务执行失败':project:myTask'。   处理'命令'./myscript.sh''以非零退出值1“

结束

这对我没用。使用非零退出值完成myscript.sh的整个想法是这样我可以执行一些代码来响应它。我需要做什么才能使构建失败但捕获结果并执行响应操作?谢谢你的帮助!

2 个答案:

答案 0 :(得分:39)

TL; DR - 使用ignoreExitValue = true

当我阅读大约第五十次的文档时,我终于看到有一个属性,ignoreExitValue,默认为false。但是如果将其设置为true,则可以在doLast块中执行自己的任务。

task myTask(type:Exec) {

    workingDir '.'

    commandLine './myscript.sh'

    ignoreExitValue true

    doLast {
        if(execResult == 0) {
           //one thing
        } else {
           //another thing
        }
    }
}

答案 1 :(得分:2)

无法发表评论,但是如果ignoreExitValue答案不起作用,另一种解决方案是将commandLinetry { ... } catch (Exception e() { ... }包围。