¿Restablecer la propiedad UP-TO-DATE de las tareas de gradle?


¿Hay alguna forma de forzar que una tarea de gradle se ejecute de nuevo o restablecer todas las tareas al estado no ACTUALIZADO?

Author: Stefan Kendall, 2011-09-03

4 answers

Intenta ejecutar tu compilación con -C rebuild que reconstruya la caché de Gradle.

En las versiones más recientes de Gradle, use --rerun-tasks

 101
Author: Rene Groeschke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-25 16:01:50

Si desea que siempre se ejecute una sola tarea, puede establecer la propiedad outputs dentro de la tarea.

outputs.upToDateWhen { false }

Tenga en cuenta que si su tarea no tiene ninguna entrada de archivo definida, Gradle puede omitir la tarea, incluso cuando use el código anterior. Por ejemplo, en una tarea Zip o Copy debe haber al menos un archivo proporcionado en la fase de configuración de la definición de la tarea.

 73
Author: cmcginty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-26 07:05:58

Puedes usar cleanTaskname

Digamos que tienes

:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE

Y quieres forzar digamos que sometask2 para ejecutar de nuevo puedes

someproject:cleanSometask2

Antes de ejecutar la tarea que lo ejecuta todo.

Aparentemente en gradle, cada tarea que entiende LO ACTUALIZADO también entiende cómo limpiarse a sí misma.

 25
Author: c_maker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-03 01:14:42

Tuve un caso difícil en el que establecer outputs.upToDateWhen { false } dentro de la tarea o agregar la bandera --rerun-tasks no ayudó ya que la tarea setOnlyIf seguía siendo establecida en false cada vez que la ejecutaba.

Añadiendo lo siguiente a build.gradle forzó la ejecución 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
Author: Matthias Braun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-17 15:41:04