2010-05-04 17 views
42

A)¿Cuál es la diferencia entre estas sintaxis de definición de tareas en gradle?

task build << { 
    description = "Build task." 
    ant.echo('build') 
} 

B)

task build { 
    description = "Build task." 
    ant.echo('build') 
} 

Me he dado cuenta de que con el tipo B, el código dentro de la tarea parece ser ejecutado al escribir gradle -t - hormiga hace eco a cabo 'construir' incluso cuando simplemente lista todas las diversas tareas disponibles. La descripción también se muestra realmente con el tipo B. Sin embargo, con el tipo A, no se ejecuta código cuando se enumeran las tareas disponibles, y la descripción no se muestra al ejecutar gradle -t. No parece que los documentos entren en la diferencia entre estas dos sintaxis (que he encontrado), solo que puede definir una tarea de cualquier manera.

Respuesta

54

La primera sintaxis define una tarea y proporciona algún código que se ejecutará cuando la tarea se ejecute. La segunda sintaxis define una tarea y proporciona algún código que se ejecutará de inmediato para configurar la tarea. Por ejemplo:

task build << { println 'this executes when build task is executed' } 
task build { println 'this executes when the build script is executed' } 

De hecho, la primera sintaxis es equivalente a:

task build { doLast { println 'this executes when build task is executed' } } 

Así, en su ejemplo anterior, para la sintaxis A la descripción no aparece en -t Gradle porque el código que establece que la descripción no se ejecuta hasta que se ejecuta la tarea, lo que no sucede cuando ejecuta gradle -t.

Para conocer la sintaxis B del código que hace la ant.echo() se ejecuta para cada invocación de Gradle, incluyendo Gradle -t

para proporcionar tanto una acción a ejecutar y una descripción de la tarea que puede hacer cualquiera de:

task build(description: 'some description') << { some code } 
task build { description = 'some description'; doLast { some code } } 
+1

así que si usted tiene tanto el código que necesita ser ejecutado para configurar la tarea, así como el código a ser ejecutado cuando la tarea se llama, la sintaxis B con un cierre doLast es el camino a seguir. – bergyman

+0

Parece que la sintaxis de definición de tarea '<<' se está eliminando con [Gradle 3.0] (https://github.com/gradle/gradle/blob/master/design-docs/gradle-3.0.md#clean-up- task-dsl-and-hierarchy)? – mkobit

Cuestiones relacionadas