确保Gradle任务始终运行,而不考虑依赖项的结果

确保Gradle任务始终运行,而不考虑依赖项的结果,gradle,dependencies,Gradle,Dependencies,如何确保下游“验证”任务即使在构建任务抛出可怕错误时也能执行 我希望所有这些可能的流程都成为可能: 构建->测试->验证 生成(错误)->验证 构建->测试(错误)->验证 我发现,GradleException和TaskExecutionException会导致一个句号,不再执行任务,StopActionException不会阻止测试执行 示例代码: task build(){ doFirst() { println "building..." throw new Gr

如何确保下游“验证”任务即使在构建任务抛出可怕错误时也能执行

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

  • 构建->测试->验证
  • 生成(错误)->验证
  • 构建->测试(错误)->验证
我发现,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)

在这种情况下,“构建”和“测试”都需要由“验证”完成。不幸的是,如果“构建”或“测试”失败,“构建计划”任务将不会执行,因此“验证”任务将永远不会运行。

有人知道这是否会遗漏构建步骤吗

如果我在每个任务上使用一个具有自己的try-catch和call-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)

这很不幸,因为我希望验证在测试之后运行,而不是在构建和测试之间运行。我想,我需要詹金斯或其他什么来执行任务。或者我可以让一个任务在一个带有finally子句的try catch中运行build、test,“validate”任务将在“test”之后运行。一个任务不能运行多次,因此,如果同一个任务完成了两个任务,它将在两个任务之后运行。