Gradle没有捕获异常

时间:2018-08-06 09:41:54

标签: gradle

我正在执行一个非常简单的Gradle任务。
哪个运行Yarn命令-yarn_test哪个运行硒测试。
我正在使用com.moowork.gradle:gradle-node-plugin:1.2.0插件来运行Yarn命令 我的任务看起来像-

task run_tests(type: YarnTask) {
try {
    args = ['test']
}catch (all){
    println('Tests failed!')
}}

在我的packge.json中,我有:
“ test”:“ mocha --timeout 25000 ./automation/test --reporter xunit-file”

即使我将其更改为以exec身份运行
        executable "sh"
        args "-c", "yarn test"

我遇到了同样的错误,所以插件无关,而是Gradle try-catch

即使一项测试都没有失败,为什么我要捕获异常。 但由于某种原因,它没有被抓住。

当我使用--stacktrace运行时,这就是我得到的-

  

error命令失败,退出代码为2。   信息请访问https://yarnpkg.com/en/docs/cli/run,以获取有关此命令的文档。

     

任务:run_tests失败   失败:构建失败,发生异常。   * 什么地方出了错:   任务':run_tests'的执行失败。   进程'命令'/DATA/build/workspace/build_build/.gradle/yarn/yarn-yarn-v1.3.2/bin/yarn''完成,退出值非零   *尝试:   使用--info或--debug选项运行以获取更多日志输出。与--scan一起运行以获取完整的见解。   *例外是:   org.gradle.api.tasks.TaskExecutionException:任务':run_tests'的执行失败。

我想念什么?
我只想打印一些错误,然后完成构建..但没有例外吗?!
Gradle 4.7,在具有Gradle包装器的Ubuntu上运行。 谢谢

编辑

即使我只跑

sh: exit 1

我得到了相同的结果,所以必须是使用gradle try-catch而不是使用纱线ormocha等

1 个答案:

答案 0 :(得分:0)

问题在于您的try / catch涉及的是配置 Gradle构建阶段,而不是执行阶段。 here涵盖了整个gradle构建生命周期,但是在答案的结尾,我将包括每个阶段的基本描述。

looks like YarnTask支持ignoreExitValue属性,因此您至少应该能够执行以下操作:

task run_tests(type: YarnTask) {
    args = ['test']
    ignoreExitValue = true
}

只是忽略结果;我认为您可以使其更加复杂,例如:

task run_tests(type: YarnTask) {
    args = ['test']
    ignoreExitValue = true
    doLast {
        if(result.getExitValue() != 0){
            println "Tests failed!"
        }
    }
}

doLast操作将在任务的所有定义操作完成后执行(例如,在运行测试之后)。


Gradle Build Lifecycle(非常简短的版本)的阶段:

  1. 初始化-确定要构建的项目/子项目
  2. 配置-配置所有项目/任务(执行构建脚本,以准备任务)
  3. 执行-自己执行任务