Gradle doFirst()执行顺序

时间:2012-02-09 00:57:30

标签: gradle groovy

如何在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)'
}

此脚本的输出为:

processing initialize (configuration)
processing depTask (configuration)
executing doFirst on initialize (execution)
processing doFirst in initialization (configuration)
executing initialize (execution)
executing depTask (execution)

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

1 个答案:

答案 0 :(得分:14)

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