2013-03-26 19 views
10

Qual è la differenza tra i seguenti due frammenti di codice?Difficoltà attività gradle

Primo:

task copyFiles(type: Copy) << { 
    from "folder/from" 
    into "dest/folder" 
} 

Secondo:

task copyFiles(type: Copy) { 
    from "folder/from" 
    into "dest/folder" 
} 

risposta

15

In breve, il primo frammento è sempre sbagliato, e la seconda è sempre nel modo giusto.

Una generazione di gradino procede in tre fasi: inizializzazione, configurazione ed esecuzione. Metodi come from e intoconfigurano l'attività, quindi devono essere richiamati nella fase di configurazione. Tuttavia, << (che è una scorciatoia per doLast) aggiunge un'azione compito - si istruisce il compito che cosa fare se e quando Viene eseguito. In altre parole, il primo snippet configura l'attività nella fase di esecuzione e, peggio ancora, dopo, l'azione principale (copia) è stata eseguita. Quindi la configurazione non avrà alcun effetto.

Tipicamente, un'attività ha sia un tipo (che porta già lungo un'azione Operazione) o una << (per un'attività ad-hoc). Ci sono casi d'uso legittimi per averli entrambi (facendo un po 'di lavoro personalizzato dopo il lavoro "principale" dell'attività), ma più spesso no, è un errore in cui l'attività viene configurata troppo tardi.

In genere consiglio di utilizzare doLast anziché <<, perché è meno criptico e rende più facile individuare tali errori. (Una volta compresi i concetti, è ovvio che task copyFiles(type: Copy) { doLast { from ... } } è errato.)

1

Il primo blocco di codice crea un'attività e aggiunge un'azione ad esso. Un'attività è composta da azioni che sono blocchi di istruzioni eseguiti in sequenza quando l'attività viene chiamata

Il secondo blocco crea un'attività e la configura. Queste istruzioni vengono eseguite nella fase del ciclo di vita gradle "configuration".

here a trovare una chiara spiegazione delle differenze

here è possibile trovare una spiegazione approfondita di compiti Gradle

here è la guida Gradle su ciclo di vita

Problemi correlati