2014-09-28 15 views

risposta

19

In pratica si tratta di un operatore leftShift - È possibile trovare ulteriori dettagli here.

In Gradle << operatore viene utilizzato per aggiungere azione ad un particolare compito. Un'attività consiste di più azioni che vengono eseguite (nell'ordine in cui sono state aggiunte) durante l'esecuzione dell'attività. << aggiunge appena un'azione alla raccolta di attività di azioni. Ulteriori informazioni su attività e azioni possono essere trovati here.

+0

Questo è in gradle l'operatore è sovraccarico per aggiungere un'attività all'azione, giusto? –

+1

Un compito è solo una chiusura in groovy, vero? –

+1

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

30

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.

+2

Questo commento salva la mia giornata! – SexyNerd

+1

Grande spiegazione @heenenee –

Problemi correlati