web-dev-qa-db-fra.com

Réinitialisation de la propriété UP-D-DATE des tâches de gradé?

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?

98
Stefan Kendall

Essayez de lancer votre construction avec -C rebuild qui reconstruit le cache de Gradle.

Dans les nouvelles versions de Gradle, utilisez --rerun-tasks

119
Rene Groeschke

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.

81
cmcginty

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.

25
c_maker

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 }
    }
  }
}
2
Matthias Braun