在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&lt;&lt; {...}将某些东西追加到最后。我原以为doLast会确保在主执行块之后完成任何“doLast”项目。
这只是gradle的doLast应该工作的方式,还是这个bug? (或者我在调用doLast之后将某些东西附加到主执行块上只是愚蠢 - 在另一个执行块中添加后这是一个简单的错误。)
答案 0 :(得分:33)
<<
是doLast
的别名,所以一切都按预期运行。