In einer Gradle-Build-Datei gibt es mehrere Möglichkeiten, die für eine bestimmte Aufgabe ausgeführten Elemente anzugeben. Die doFirst-Methode platziert ein Aufgabenelement oben auf dem Aufgabenstapel, sodass das Element vor dem Rest des Aufgabenstapels ausgeführt wird. Dies ist sehr praktisch, wenn Sie vor der Hauptaufgabe einige vorbereitende Aufgaben erledigen müssen. Wenn Sie DoFirst mehrmals aufrufen, wird das Element, das im letzten Aufruf hinzugefügt wurde, als erstes ausgeführt.Gradle doast-Philosophie
In der Theorie sollte DoLast etwas ähnliches tun, aber doLast sollte aufgerufen werden, nachdem die Hauptausführung der Aufgabe abgeschlossen ist. Wenn Sie in d 1.2 jedoch doLast aufrufen und dann nach doLast in der Datei gra- dle.build etwas zur Hauptaufgabe hinzufügen, ist das Hauptaufgabenelement das zuletzt aufgerufene Element. Zum Beispiel kann die folgende gradle Build-Datei:
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"
}
erzeugt die folgende Ausgabe:
: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
Meine Frage lautet: Ist es die Absicht von doLast einfach Schritten auf das Ende der Aufgabe hängen (Wie geht das Erste an den Anfang)? Wenn dem so ist, scheint doLast sinnlos zu sein, mit Ausnahme der Bereitstellung von Symmetrie mit doFirst. Ein Benutzer kann einfach myTask < < {...} tun, um etwas an das Ende anzuhängen. Ich hätte gedacht, dass doLast sicherstellen würde, dass alle "doLast" -Elemente nach dem Hauptausführungsblock ausgeführt würden.
Ist das einfach die Art und Weise, in der Gradle's doLast funktionieren soll, oder ist das ein Fehler? (Oder bin ich einfach dumm, etwas nach dem Aufruf von doLast an den Hauptausführungsblock anzuhängen - was ein einfacher Fehler war, nachdem ich in einem anderen Ausführungsblock gelandet war).