无论依赖关系的结果如何,确保Gradle Task始终运行

时间:2015-12-29 22:46:40

标签: gradle dependencies

即使构建任务引发了可怕的错误,我如何确保下游“验证”任务仍然执行?

我希望所有这些可能的流程都成为可能:

  • 构建 - >测试 - >验证
  • 构建(错误) - >验证
  • 构建 - >测试(错误) - >验证

我发现 GradleException TaskExecutionException 导致完全停止而没有进一步执行任务, StopActionException 不会阻止测试执行。

示例代码:

task build(){
  doFirst() {
    println "building..."
    throw new GradleException("Gradle exc")
  }
}

task test(){
  mustRunAfter 'build'
  doFirst() {
    println "testing..."
  }
}


task validate() {
  doFirst() {
    println "validating..."
  }
}


task buildPlan(dependsOn:[build,test]) {}
buildPlan.finalizedBy(validate)

2 个答案:

答案 0 :(得分:3)

在这种情况下,' build'和'测试'需要finalizedBy'验证'。 ' buildPlan'遗憾的是,如果任何一个“建立”任务,它将被执行。或者'测试'因此无法验证'任务永远不会运行。

答案 1 :(得分:0)

任何人都知道这是否会遗漏构建步骤?

如果我使用自己的try catch任务并在每个任务上调用execute,那么它可以按我的意愿工作。

task build(){
  doFirst() {
    println "building..."
    throw new GradleException("Gradle exc")
  }
}

task test(){
  mustRunAfter 'build'
  doFirst() {
    println "testing..."
  }
}


task validate() {
  doFirst() {
    println "validating..."
  }
}


// Validate Called Reliably
task buildWithCatch {
  doFirst {
    try {
      build.execute()
      test.execute()
    }
    finally {
      validate.execute()
    }
  }
}

// Validate Never Called
task buildPlan(dependsOn:[build,test]) {}
buildPlan.finalizedBy(validate)