tutorial traduccion gradle

traduccion - Comprender la dependencia de tareas de Gradle(dependsOn)



gradle vs maven (2)

El modelo de tareas de Gradle es "plano" y no tiene un concepto de agregación. (Es importante tener en cuenta que TaskInternal#execute es un método interno y no se debe TaskInternal#execute desde scripts de compilación). La agregación a menudo se simula con una tarea de ciclo de vida (una tarea con dependencias de tareas pero sin ninguna acción de tarea):

task allTests { dependsOn tasks.withType(Test) }

Además de dependsOn , las siguientes relaciones de tareas son compatibles: mustRunAfter , shouldRunAfter y finalizedBy .

Dos preguntas:

  1. ¿Cuál es la forma de Gradle de especificar que 1 tarea se compone de varias otras tareas?
  2. Parece que el método taskName.execute() de taskName.execute() no respeta las relaciones de taskName de taskName es así? ¿Qué es lo que funciona?

Más antecedentes:

En este momento tengo un script de compilación que no tiene complementos (no Java en otras palabras). Quiero una tarea llamada tests que ejecutará todas mis tareas de prueba. Tengo 3 de esas tareas. Llámelos task1, task2 y task3.

Podría decir tests.dependsOn [''task1'', ''task2'', ''task3'']

Esto es un poco inestable porque la relación parece ser una tests.isComprisedOf [''task1'', ''task2'', ''task3''] Se tests.isComprisedOf [''task1'', ''task2'', ''task3'']

Yo podría decir:

task tests << { task1.execute() task2.execute() task3.execute() }

pero luego task3, que a su vez depende de taskSetup, se ejecuta sin ejecutar taskSetup. En otras palabras, la llamada a execute () no parece respetar la estrategia de resolución de dependencias de gradle.

Una última pequeña queja (realmente me encanta gradle por cierto), es que es difícil buscar en este tema porque la dependencia significa dos cosas diferentes en gradle: depende de las dependencias de estilo y de las dependencias de estilo de biblioteca.


Normalmente, no task.execute() .

Puede especificar que una tarea se compone de otras tareas de la siguiente manera:

task task1 << { println "Hello" } task task2 << { println "World" } task task3(dependsOn: ''task3dependency'') << { println "QBert" } task task3dependency << { println "MR" } task tests(dependsOn: [''task1'', ''task2'', ''task3''])

Esto produce:

$ gradle tests :task1 Hello :task2 World :task3dependency MR :task3 QBert :tests BUILD SUCCESSFUL

Tenga en cuenta que el orden en el que se ejecutan las tareas de dependencia no siempre está garantizado, pero puede mitigarlo especificando el orden task2.mustRunAfter task1 . Sin embargo, normalmente las tareas se ejecutan en el orden esperado.

Además, debe leer sobre el ciclo de vida de compilación de Gradle . Cuando utiliza la task task1 << {...} sintaxis task task1 << {...} , está especificando un cierre que se ejecuta en la fase de ejecución de la tarea. Antes de ejecutar, la fase de configuración evalúa su script de construcción y determina las tareas que se ejecutarán y en qué orden. Cuando ejecuta tareas manualmente, como en:

task tests << { task1.execute() task2.execute() task3.execute() }

ha pasado por alto la capacidad de Gradle para evaluar las dependencias de tareas de task3, por lo tanto, solo ejecuta task3.