2013-07-03 14 views
11

Dopo aver creato il mio file di output finale con Gradle, voglio fare 2 cose. Aggiornare un file version.properties locale e copiare l'output finale finale in una directory specifica per l'archiviazione. Supponiamo di avere già 2 metodi implementati che fanno esattamente quello che ho appena descritto, updateVersionProperties() e archiveOutputFile().È meglio utilizzare le dipendenze delle attività o task.doLast in Gradle?

so che sto chiedendo che cosa è il modo migliore per farlo ...

Alternativa A:

assembleRelease.doLast { 
    updateVersionProperties() 
    archiveOutputFile() 
} 

B Alternativa:

task myBuildTask(dependsOn: assembleRelease) << { 
    updateVersionProperties() 
    archiveOutputFile() 
} 

E qui io chiamerei myBuildTask anziché assembleRelease come in alternativa A.

Qual è il modo consigliato di fare questo e perché? C'è qualche vantaggio di uno rispetto all'altro? Vorrei qualche chiarimento per favore ... :)

risposta

13

Ogni volta che puoi, modella le nuove attività come attività separate. (Nel tuo caso, si potrebbe aggiungere due altri compiti.) Questo ha molti vantaggi:

  • Meglio il feedback da cui l'attività è in corso di esecuzione o non è riuscito
  • possibilità di dichiarare ingressi delle attività e uscite (raccogliendo tutto benefici che provengono da questa)
  • possibilità di riutilizzare tipi di attività esistenti
  • più possibilità per Gradle per eseguire compiti in parallelo
  • Ecc

A volte non è facilmente possibile modellare un'attività come attività separata. (Un esempio è quando è necessario post-elaborare gli output di un'attività esistente sul posto. Facendo questo in un'attività separata, l'attività originale non dovrebbe mai essere up-to-date nelle esecuzioni successive.) Solo allora l'attività dovrebbe essere associata a un attività esistente con doLast.

+1

Come si consiglia di creare tali dipendenze attività? Vorrei una singola attività per assemblare l'intero progetto (in pratica "sostituendo" 'assembleRelease') ed entrambi questi task devono essere eseguiti solo ** dopo un'esecuzione ** di successo di" assembleRelease ". Tra di loro, l'ordine non è veramente rilevante. –

+6

'myBuildTask.dependsOn (updateVersionProperties, archiveOutputFile); updateVersionProperties.dependsOn (assembleRelease); archiveOutputFile.dependsOn (assembleRelease) ' –

Problemi correlati