Existe-t-il un moyen de forcer une tâche de gradle à s'exécuter à nouveau ou de réinitialiser les tâches toutes à l'état non UP-TO-DATE?
Essayez de lancer votre construction avec -C rebuild
qui reconstruit le cache de Gradle.
Dans les nouvelles versions de Gradle, utilisez --rerun-tasks
Si vous souhaitez qu'une seule tâche soit toujours exécutée, vous pouvez définir la propriété outputs
à l'intérieur de la tâche.
outputs.upToDateWhen { false }
Sachez que si votre tâche ne comporte aucune entrée de fichier définie, Gradle peut ignorer la tâche, même si vous utilisez le code ci-dessus. Par exemple, dans une tâche Zip ou Copier, au moins un fichier doit être fourni dans la phase configuration de la définition de la tâche.
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, sometask2 à courir à nouveau, vous pouvez
someproject:cleanSometask2
avant d'exécuter la tâche qui l'exécute tout.
Apparemment, chaque tâche qui comprend UP-TO-DATE comprend également comment se nettoyer.
J'ai eu un cas difficile où placer outputs.upToDateWhen { false }
Dans la tâche ou ajouter l'indicateur --rerun-tasks
N'aidait pas, puisque la tâche setOnlyIf
continuait à être définie sur false
temps je l'ai couru.
L'ajout de ce qui suit à build.gradle
A forcé 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 }
}
}
}