2012-02-09 14 views
7

¿Cómo se determina el orden del método doFirst en un script de construcción gradle? Tengo el siguiente script de ejemplo que contiene dos métodos doFirst. Entiendo que son aditivos, ya que ambos se ejecutan, pero el orden en que esto ocurre mira hacia atrás:Gradle doFirst() Orden de ejecución

task initialize 
task depTask(dependsOn: initialize) 

initialize { 
    doFirst { 
     println 'processing doFirst in initialization (configuration)' 
    } 

    println 'processing initialize (configuration)' 
} 

depTask { 
    println 'processing depTask (configuration)' 
} 

depTask << { 
    println 'executing depTask (execution)' 
} 

initialize << { 
    println 'executing initialize (execution)' 
} 

initialize.doFirst { 
    println 'executing doFirst on initialize (execution)' 
} 

La salida de este script es:

processing initialize (configuration) 
processing depTask (configuration) 
executing doFirst on initialize (execution) 
processing doFirst in initialization (configuration) 
executing initialize (execution) 
executing depTask (execution) 

la primera función "doFirst" se define en la tarea de inicialización. El segundo se define fuera del bloque de configuración. ¿Por qué la primera instancia no se ejecuta antes que la segunda? El orden de ejecución mira hacia atrás. Hubiera esperado que el primero, dentro de la definición de configuración, se ejecutara primero. Cualquier ayuda para entender esto sería apreciada.

+0

'println 'processing doFirst en inicialización (configuración)' 'No creo que esto ocurra en la fase de configuración. –

Respuesta

14

initialize { doFirst { ... } } y initialize.doFirst { ... } son exactamente lo mismo. Ambas declaraciones están insertando una acción en el frente de la lista de acciones de la tarea. Por lo tanto, la acción que se inserta más tarde (en este caso más abajo en el script) se ejecutará primero.

+1

Ok, ¿esto funciona como una pila? (último en entrar primero en salir - LIFO). – jmq

+0

nm, lo probé. Gracias por señalarme en la dirección correcta. – jmq

Cuestiones relacionadas