在 gradle 构建文件中,有多种方法可以指定为特定任务执行的项目。doFirst 方法将一个任务项放在任务堆栈的顶部,以便该项在任务堆栈的其余部分之前执行。如果您需要在主要任务之前做一些准备工作,这非常方便。事实上,如果你多次调用 doFirst,最后一次调用中添加的项是最先执行的。
理论上,doLast 应该做类似的事情,但是 doLast 应该在任务的主要执行完成之后被调用。但是,在 gradle 1.2 中,如果你调用 doLast,然后在 gradle.build 文件中的 doLast 之后向主任务添加一些内容,则主任务项是最后调用的项。例如,以下 gradle 构建文件:
task myTask
myTask << {
println "myTask main execution block"
}
myTask.doFirst {
println "myTask doFirst call one"
}
myTask.doFirst {
println "myTask doFirst call two"
}
myTask.doLast {
println "myTask doLast"
}
myTask << {
println "myTask more main execution block"
}
产生以下输出:
:myTask
myTask doFirst call two
myTask doFirst call one
myTask main execution block
myTask doLast
myTask more main execution block
BUILD SUCCESSFUL
Total time: 1.585 secs
我的问题是:doLast 的意图是简单地将步骤附加到任务的末尾(就像 doFirst 附加到开头)?如果是这样,除了提供与 doFirst 的对称性之外,doLast 似乎毫无意义。用户可以简单地执行 myTask << {...} 将某些内容附加到末尾。我原以为 doLast 会确保在主执行块之后完成任何“doLast”项目。
这仅仅是 gradle 的 doLast 应该工作的方式,还是这是一个错误?(或者我只是愚蠢地在调用 doLast 之后在主执行块上附加了一些东西——这是在添加另一个执行块之后的一个简单错误)。