Die <<
ist ein Links-Shift-Operator. In diesem Szenario ist task "task$counter"
eine Task
Objektdeklaration und <<
ist als Alias für die doLast
-Methode überladen, die den Abschluss an die Liste der Aktionen anfügt, die ausgeführt werden, wenn die Task ausgeführt wird.
Wenn Sie die <<
nicht angeben, wird der Verschluss als configuration closure behandelt und wird standardmäßig während der Konfigurationsphase des Projektes build lifecycle, unabhängig davon, was auch immer Aufgabe Argument verwendet wird, auf der Kommandozeile ausgeführt werden.
Beispiel:
Wenn Sie die Konfiguration in der Frage angegeben nehmen:
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
Und laufen gradle task3
, wird der Ausgang sein:
:task3
I'm task number 3
Da jeder Verschluss definiert wurde eine für die Aufgabe spezifische Ausführungsaktion sein. Da task3
als auszuführende Aufgabe benannt wurde, war dies der einzige ausgeführte Aktionsabschluss.
Aber wenn Sie die <<
entfernen und die Konfiguration vornehmen, wie folgt:
4.times { counter ->
task "task$counter" {
println "I'm task number $counter"
}
}
Und gradle task3
laufen, wird der Ausgang dann:
I'm task number 0
I'm task number 1
I'm task number 2
I'm task number 3
:task3 UP-TO-DATE
Dies liegt daran, alle Verschlüsse zu definiert wurden Konfigurieren Sie die Aufgaben selbst, nicht als Aktionen beim Ausführen der Aufgaben ausgeführt werden. In diesem Fall hat Gradle alle Schließungen ausgeführt, während das Projekt konfiguriert wurde, und als es darum ging, task3
auszuführen, gab es keine auszuführenden Aktionen, daher meldete es die Aufgabe als UP-TO-DATE
.
Das ist in Großbuchstaben der Operator ist überladen, um eine Aufgabe zur Aktion hinzufügen, richtig? –
Eine Aufgabe ist nur eine Schlussfolgerung in groovy, oder? –
Ja, es ist in dieser Klasse genau überladen: 'org.gradle.api.internal.AbstractTask'. Wenn es um die zweite Frage geht, nicht genau.Eine Aufgabe ist immer eine Instanz der Klasse 'DefaultTask' (oder eine Klasse, die' DefaultTask' erweitert (sie kann als eine Art * Schließung * definiert werden, muss aber nicht). – Opal