In un file build di gradle esistono diversi modi per specificare gli elementi eseguiti per una determinata attività. il metodo doFirst mette un elemento di attività nella parte superiore dello stack di attività, in modo che l'elemento venga eseguito prima del resto dello stack di attività. Questo è molto utile se hai bisogno di fare alcuni elementi preparatori prima del compito principale. Infatti, se si chiama doFirst più volte, l'elemento aggiunto nell'ultima chiamata è la prima cosa eseguita.gradle doLast philosophy
In teoria, doLast dovrebbe fare qualcosa di simile, ma doLast dovrebbe essere chiamato dopo che l'esecuzione principale dell'attività è stata completata. Ma, nel punto 1.2, se si chiama doLast e quindi si aggiunge qualcosa all'attività principale dopo doLast nel file gradle.build, l'elemento dell'attività principale è l'ultimo elemento chiamato. Ad esempio, il seguente file di build Gradle:
task myTask
myTask << {
println "myTask main execution block"
}
myTask.doFirst {
println "myTask doFirst call one"
}
myTask.doFirst {
println "myTask doFirst call two"
}
myTask.doLast {
println "myTask doLast"
}
myTask << {
println "myTask more main execution block"
}
produce il seguente output:
:myTask
myTask doFirst call two
myTask doFirst call one
myTask main execution block
myTask doLast
myTask more main execution block
BUILD SUCCESSFUL
Total time: 1.585 secs
mia domanda è questa: E 'l'intento di doLast di aggiungere semplicemente passi sulla fine del task (come fanno i primi puntini all'inizio)? Se è così, doLast sembra inutile con l'eccezione di fornire simmetria con doFirst. Un utente può semplicemente fare myTask < < {...} per aggiungere qualcosa alla fine. Avrei pensato che doLast avrebbe assicurato che tutti gli elementi "doLast" sarebbero stati eseguiti dopo il blocco di esecuzione principale.
È semplicemente il modo in cui doLast del gradle funziona, oppure si tratta di un errore ?? (o sono semplicemente stupido per aggiungere qualcosa al blocco di esecuzione principale dopo aver chiamato doLast - che è stato un semplice errore dopo aver virato in un altro blocco di esecuzione).