Gradle doFirst()执行顺序

jmq*_*jmq 10 groovy gradle

如何在gradle构建脚本中确定doFirst方法的顺序?我有以下示例脚本,其中包含两个doFirst方法.我知道它们是附加的,因为它们都执行,但发生这种情况的顺序看起来是倒退的:

task initialize
task depTask(dependsOn: initialize)

initialize {
    doFirst {
        println 'processing doFirst in initialization (configuration)'
    }

    println 'processing initialize (configuration)'
}

depTask {
    println 'processing depTask (configuration)'
}

depTask << {
    println 'executing depTask (execution)'
}

initialize << {
    println 'executing initialize (execution)'
}

initialize.doFirst {
    println 'executing doFirst on initialize (execution)'
}
Run Code Online (Sandbox Code Playgroud)

此脚本的输出是:

processing initialize (configuration)
processing depTask (configuration)
executing doFirst on initialize (execution)
processing doFirst in initialization (configuration)
executing initialize (execution)
executing depTask (execution)
Run Code Online (Sandbox Code Playgroud)

第一个"doFirst"函数在初始化任务中定义.第二个是在配置块之外定义的.为什么第一个实例在第二个实例之前没有执行?执行顺序向后看.我希望在配置定义中首先执行第一个.任何帮助理解这一点将不胜感激.

Pet*_*ser 15

initialize { doFirst { ... } }并且initialize.doFirst { ... }是完全相同的事情.两个语句都在任务的动作列表的前面插入一个动作.因此,稍后将插入的操作(在这种情况下,在脚本中进一步向下)将首先执行.