Existe-t-il un moyen de forcer une tâche gradle à s'exécuter à nouveau ou de réinitialiser toutes les tâches à l'état pas à jour?
Existe-t-il un moyen de forcer une tâche gradle à s'exécuter à nouveau ou de réinitialiser toutes les tâches à l'état pas à jour?
Réponses:
Essayez d'exécuter votre build avec -C rebuild
qui reconstruit le cache de Gradle.
Dans les versions plus récentes de Gradle, utilisez --rerun-tasks
Si vous souhaitez qu'une seule tâche soit toujours exécutée, vous pouvez définir la outputs
propriété à l'intérieur de la tâche.
outputs.upToDateWhen { false }
Veuillez noter que si votre tâche n'a pas d'entrées de fichier définies, Gradle peut ignorer la tâche, même en utilisant le code ci-dessus. Par exemple, dans une tâche Zip ou Copy, au moins un fichier doit être fourni dans la phase de configuration de la définition de tâche.
tasks.whenTaskAdded { theTask -> if (theTask.name.startsWith("dex")) { theTask.outputs.upToDateWhen { false } theTask.doLast { task ->... }}}
Vous pouvez utiliser cleanTaskname
Disons que vous avez
:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE
Et vous voulez forcer, disons, quelque chose à exécuter à nouveau, vous pouvez
someproject:cleanSometask2
avant d'exécuter la tâche qui exécute tout.
Apparemment, en gradle, chaque tâche qui comprend UP-TO-DATE comprend également comment se nettoyer.
J'ai eu un cas difficile où la configuration outputs.upToDateWhen { false }
à l'intérieur de la tâche ou l'ajout du drapeau --rerun-tasks
n'aidait pas car la tâche était setOnlyIf
toujours définie à false
chaque fois que je l'exécutais.
Ajout de ce qui suit pour build.gradle
forcer l'exécution de 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 }
}
}
}