que - Comprender la sintaxis groovy en una definición de tarea gradle
gradle tutorial español (1)
Soy nuevo en Gradle and Groovy y trato de entender qué está sucediendo a nivel de groovy cuando se define una tarea gradle.
task hello {
println "configuring task hello"
doLast {
println "hello there"
}
}
Al leer el libro "Gradle In Action", sé que la task hello {}
es realmente una llamada al método task()
de la interfaz groovy del Project
. En la página 77 muestra que hay 4 métodos llamados tareas en la interfaz del Project
task(args: Map<String,?>, name:String)
task(args: Map<String,?>, name:String, c:Closure)
task(name: String)
task(name: String, c:Closure)
Entiendo que {}
es el cuerpo de cierre.
Lo que no entiendo es cómo groovy interpreta hello
en la task hello { }
acuerdo con https://stackoverflow.com/a/25592665/438319 hay un plugin de compilador groovy que convierte la task hello { }
en task(''hello'', { })
Mis preguntas:
¿Dónde puedo encontrar información sobre el plugin Gradle Groovy Compiler que realiza la conversión?
¿Es la afirmación de que los guiones de Gradle son programas geniales técnicamente incorrectos ya que de alguna forma Gradle extiende el lenguaje de programación Groovy?
¿Hay alguna manera de obtener el comando
gradle
para imprimir el código groovy base que se genera después de que se haya ejecutado el complemento del compilador?
Gradle usa Transformaciones AST para extender la sintaxis de Groovy. La sintaxis de definición de tarea que menciona es solo una de las transformaciones que aplica Gradle. Puede encontrar la implementación para esa transformación here . Para responder a sus preguntas específicas:
Las transformaciones individuales que aplica Gradle no están específicamente documentadas en ningún lugar del que sea consciente. Sin embargo, podría mirar las otras clases en el mismo paquete del enlace de arriba.
Las secuencias de comandos de Gradle admiten un superconjunto de sintaxis de Groovy. Cualquier Groovy válido también es válido en un script de Gradle, sin embargo, un script de Gradle no es necesariamente (y generalmente no) un Groovy "predeterminado" válido.
No hay una forma de obtener una salida del código Groovy equivalente ya que es el árbol de sintaxis abstracta que se manipula en la memoria.