Il <<
è un operatore di spostamento a sinistra. In questo scenario, task "task$counter"
è una dichiarazione oggetto Task
e <<
è sovraccarico come alias del metodo doLast
, che aggiunge la chiusura all'elenco di azioni da eseguire durante l'esecuzione dell'attività.
Se non si specifica il <<
, la chiusura viene trattato come un configuration closure e verrà eseguito per impostazione predefinita durante la fase di configurazione del del progetto build lifecycle, indipendentemente da qualsiasi argomento compito è dato sulla riga di comando.
Esempio:
Se si prende la configurazione specificata nella domanda:
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
Ed eseguire gradle task3
, l'uscita sarà:
:task3
I'm task number 3
Poiché ogni chiusura è stata definita essere un'azione di esecuzione specifica per l'attività. Poiché task3
è stato nominato come compito da eseguire, è stata eseguita l'unica chiusura azione.
Ma se si rimuove il <<
e rendere la configurazione come segue:
4.times { counter ->
task "task$counter" {
println "I'm task number $counter"
}
}
Ed eseguire gradle task3
, l'uscita sarà allora:
I'm task number 0
I'm task number 1
I'm task number 2
I'm task number 3
:task3 UP-TO-DATE
Questo perché tutte le chiusure sono state definite a configurare le attività stesse, non essere eseguite come azioni durante l'esecuzione delle attività. Quindi, in questo caso, Gradle ha eseguito tutte le chiusure durante la configurazione del progetto, quindi quando è arrivato il momento di eseguire task3
, non c'erano azioni da eseguire, quindi ha segnalato l'attività come UP-TO-DATE
.
Questo è in gradle l'operatore è sovraccarico per aggiungere un'attività all'azione, giusto? –
Un compito è solo una chiusura in groovy, vero? –
Sì, è sovraccarico in questa classe esattamente: 'org.gradle.api.internal.AbstractTask'. Quando si tratta della seconda domanda, non esattamente.Un'attività è sempre un'istanza della classe 'DefaultTask' (o una classe che estende' DefaultTask' (può essere definita come una sorta di * chiusura *, ma non deve). – Opal