2014-09-28 7 views

Antwort

19

Grundsätzlich ist dies ein leftShift Operator - Weitere Details finden Sie unter here.

In gradle << Operator wird verwendetAktion zu einer bestimmten Aufgabe hinzuzufügen. Eine Aufgabe besteht aus mehreren Aktionen, die während der Ausführung der Aufgabe ausgeführt werden (in der Reihenfolge, in der sie hinzugefügt wurden). << fügt der Sammlung von Aktionen nur eine Aktion hinzu. Weitere Informationen zu Aufgaben und Aktionen finden Sie unter here.

+0

Das ist in Großbuchstaben der Operator ist überladen, um eine Aufgabe zur Aktion hinzufügen, richtig? –

+1

Eine Aufgabe ist nur eine Schlussfolgerung in groovy, oder? –

+1

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

30

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.

+2

Dieser Kommentar rettet meinen Tag! – SexyNerd

+1

Große Erklärung @heenenee –