确保 Gradle 任务始终运行,无论依赖项的结果如何

Ensuring Gradle Task always runs regardless of results from dependencies

即使构建任务抛出可怕的错误,我如何确保下游 "validate" 任务执行?

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

我发现 GradleExceptionTaskExecutionException 导致完全停止,没有进一步的任务执行,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)

在这种情况下,'build' 和 'test' 都需要 finalizedBy 'validate'。不幸的是,如果 'build' 或 'test' 失败,'buildPlan' 任务将不会执行,因此 'validate' 任务永远不会 运行.

有人知道这是否会省去构建步骤吗?

如果我使用一个任务,它有自己的 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)