Esiste un modo per forzare la ripetizione di un'attività gradle o ripristinare tutte le attività allo stato non AGGIORNATO ?
Esiste un modo per forzare la ripetizione di un'attività gradle o ripristinare tutte le attività allo stato non AGGIORNATO ?
Risposte:
Prova a eseguire la tua build con -C rebuild
che ricostruisce la cache di Gradle.
Nelle versioni più recenti di Gradle, usa --rerun-tasks
Se desideri che una singola attività venga sempre eseguita, puoi impostare la outputs
proprietà all'interno dell'attività.
outputs.upToDateWhen { false }
Tieni presente che se la tua attività non ha input di file definiti, Gradle potrebbe saltare l'attività, anche quando si utilizza il codice sopra. Ad esempio, in un'attività Zip o Copia deve essere fornito almeno un file nella fase di configurazione della definizione dell'attività.
tasks.whenTaskAdded { theTask -> if (theTask.name.startsWith("dex")) { theTask.outputs.upToDateWhen { false } theTask.doLast { task ->... }}}
Puoi usare cleanTaskname
Diciamo che hai
:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE
E vuoi forzare diciamo che Sometask2 funzioni di nuovo che puoi
someproject:cleanSometask2
prima di eseguire l'attività che esegue tutto.
Apparentemente in gradle, ogni attività che comprende UP-TO-DATE capisce anche come pulirsi.
Ho avuto un caso difficile in cui l'impostazione outputs.upToDateWhen { false }
all'interno dell'attività o l'aggiunta del flag --rerun-tasks
non aiutava poiché l'attività setOnlyIf
continuava a essere impostata sufalse
ogni volta che l'ho eseguita.
Aggiungendo quanto segue per build.gradle
forzare l'esecuzione di myTask
:
gradle.taskGraph.whenReady { taskGraph ->
def tasks = taskGraph.getAllTasks()
tasks.each {
def taskName = it.getName()
if(taskName == 'myTask') {
println("Found $taskName")
it.setOnlyIf { true }
it.outputs.upToDateWhen { false }
}
}
}