运行 gradle 任务在其他任务的 doLast 之后

Run gradle task after doLast of a other task

我的 build.gradle (xy) 文件中有一个变量,它包含一个整数值和三个简单的任务。树任务也被“捆绑”在第四个任务中,将三个任务一一调用。如果我调用任务callAll,任务callOne应该给 int 值加 5,task callTwo 也应该给 int 值加 5,但是在 doLast 块中,最后是 task callThree 打印出值。它应该是 10 但它打印了 5,我猜是因为 doLast 块。但是我不明白为什么,我声明调用任务 callThree it mustRunAfter callTwo 在任务callAll.

这个例子当然是我拥有的一个更复杂的build.gradle的简化版本。如何在不更改三个简单任务的情况下获得正确的输出?

project.ext{
 xy= 0
}

task callOne(){
 xy = xy + 5
}

task callTwo(){
 doLast{
  xy = xy + 5
 } 
}

task callThree(){
 println "xy : $xy"
}

task callAll(){
 dependsOn 'callOne'
 dependsOn 'callTwo'
 dependsOn 'callThree'

 tasks.findByName('callTwo').mustRunAfter 'callOne'
 tasks.findByName('callThree').mustRunAfter 'callTwo'
}

Gradle 构建运行三个不同的阶段:初始化、配置和执行 (Documentation)。

在配置阶段,配置项目及其任务。在这个阶段:

  • callOnexy = xy + 5
  • callTwo 什么都不做
  • callThree 打印 println "xy : $xy"

任务在 Gradle 构建的执行阶段执行,这意味着:

  • callOne 什么都不做
  • callTwoxy = xy + 5
  • callThree什么都不做
打印

5 而不是 10,因为您正在混合配置和执行阶段。

callAll 或多或少只是配置任务图的自定义生命周期任务。 callAll 本身不执行对其他任务的调用,因此在执行阶段不执行任何操作。

您可以通过将所有任务操作包含在 doFirst {}doLast {} 块中来获得您想要的行为。

请查看 Configuration time and execution time 了解更多信息。