Sto imparando Gradle e sto cercando di capire come i file di input e output determinano se un'attività è aggiornata.Ingressi e uscite Gradle
Questa attività non è mai aggiornata, anche quando il file di costruzione non cambia.
task printFoo() {
inputs.file(getBuildFile())
doLast {
println 'foo'
}
}
Questa attività è sempre aggiornata, anche quando il file di costruzione cambia.
task printFoo() {
outputs.file(getBuildFile())
doLast {
println 'foo'
}
}
mi aspettavo entrambi gli esempi di prendere in considerazione il compito di data solo quando il file di build modifiche, e fino ad oggi il contrario. Cosa mi manca?
Ho eseguito nuovamente il test con diversi file: lo stato è sempre aggiornato quando viene specificato solo l'output. Quando vengono specificati sia input che output, lo stato cambia come previsto (anche quando input e output sono lo stesso file). Ho accettato questa risposta in base alla dichiarazione, "_Gradle ha bisogno di timestamp per input e outputs._" I miei test mostrano che entrambi sono necessari. – jaco0646
Sembra un bug. Ma non ho la minima idea di chi dovrebbe cambiare i file di output e quando farlo, per un compito con solo output da considerare scaduti. Dovresti toccare/cambiare le uscite durante la fase di configurazione di quel compito? La semantica non è chiara secondo me. È meglio specificare sempre input e output per un comportamento affidabile. –