2011-09-02 15 views

Respuesta

92

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

En las nuevas versiones de Gradle, utilice --rerun-tasks

23

Puede utilizar cleanTaskname

Digamos que usted tiene

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

Y desea forzar digamos sometask2 a correr de nuevo se puede

someproject:cleanSometask2 

antes de ejecutar la tarea que se ejecuta todo.

Aparentemente en gradle, cada tarea que entiende UP-TO-DATE también comprende cómo limpiarse.

+0

Esto funciona definitivamente. ¿Hay alguna tarea "cleanAll"? –

+0

'gradle clean' limpiará todo para el proyecto en el que se encuentra. Básicamente borra su carpeta principal de salida que es '/ build' por defecto. Esto es lo que estabas buscando? –

+5

No. No se volverá a configurar de forma actualizada si se capturó la actualización como archivos de salida para una tarea determinada. Es decir, si tuve una parte de la ruptura de compilación pero tuve éxito en general, el estado capturado es incorrecto, y necesito despejarlo. –

66

Si sólo desea una sola tarea se ejecute siempre, puede establecer la propiedad outputs en el interior de la tarea.

outputs.upToDateWhen { false } 

Por favor, tenga en cuenta que si su tarea no tiene ninguna entrada de archivo definidos, Gradle puede omitir la tarea, incluso cuando se utiliza el código de seguridad. Por ejemplo, en una tarea Zip o Copiar, debe haber al menos un archivo proporcionado en la fase de configuración de la definición de la tarea.

+12

Esto no hace nada por mí. Lo agregué a una tarea y obtuve "ACTUALIZADO". Lo curioso es que es un ZipTask y eliminé el archivo de destino. – maaartinus

+4

Esto es increíble para el uso de la siguiente manera: 'tasks.whenTaskAdded {theTask -> si (theTask.name.startsWith ("Dex")) { theTask.outputs.upToDateWhen {false} { theTask.doLast tarea ->. ..}}} ' –

+0

No funciona para mí :( –

1

tuve un caso difícil establecer donde outputs.upToDateWhen { false } dentro de la tarea o la adición de la bandera --rerun-tasks no ayuda, ya que se mantiene fija la tarea de setOnlyIf a false cada vez que me encontré con él.

añadiendo lo siguiente a build.gradle obligaron a 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 } 
    } 
    } 
} 
Cuestiones relacionadas