什么';Gradle doFirst和doLast的设计目的是什么?

什么';Gradle doFirst和doLast的设计目的是什么?,gradle,Gradle,例如,我有Gradle脚本,如: myTask_A { doFirst { println "first string" } doLast { println "last string" } } 以下两个任务具有完全相同的执行结果: myTask_B { doFirst { println "first string" println "last string" } } myTa

例如,我有Gradle脚本,如:

myTask_A {
    doFirst {
        println "first string"

    }
    doLast {
        println "last string"
    }
}
以下两个任务具有完全相同的执行结果:

myTask_B {
    doFirst {
        println "first string"
        println "last string"
    }
}

myTask_C {
    doLast {
        println "first string"
        println "last string"
    }
}

当上述任务产生相同的结果时,doFirst和doLast的设计目的是什么?

它和可扩展性、重用和避免重复有关

例如,内置任务可以扩展为:

task CopyAndThen(type: Copy) {
   doFirst {
      println "this is before the actual copy"
   }
   doLast {
      println "this is after the actual copy"
   }
}
我想到的第二个常见场景是,您可以在项目顶部有一个具有常见行为的任务定义:

allprojects {
    task myTask_a {
        doFirst {...}
    }
}
然后具体的项目可以扩展。
任务本质上有一个需要运行的列表,选择
doFirst
doLast
控制插入到列表的哪一端

如果在一个任务中声明多个DoFirst或doLast会怎么样?这是一个有效的配置,每个
DoFirst
doLast
都是一个添加到列表中的闭包,并按顺序执行。多个
doLast
将按声明的顺序执行,而
dofirst
将按相反的顺序执行。啊,谢谢。我真希望它被命名为“addFirst/Last”或“insertFirst/Last”。