我是Gradle和Groovy的新手,并且在定义gradle任务时试图了解groovy级别的情况 .
task hello {
println "configuring task hello"
doLast {
println "hello there"
}
}
通过阅读"Gradle In Action"书,我知道 task hello {}
实际上是对groovy Project
接口的 task()
方法的调用 . 在页77上,它显示 Project
接口上有4个称为任务的方法
task(args: Map<String,?>, name:String)
task(args: Map<String,?>, name:String, c:Closure)
task(name: String)
task(name: String, c:Closure)
我知道 {}
是封闭体 .
我不明白的是,根据https://stackoverflow.com/a/25592665/438319,groovy在 task hello { }
中如何解释 hello
有一个groovy编译器插件将 task hello { }
转换为 task('hello', { })
我的问题:
-
在哪里可以找到有关进行转换的Gradle Groovy编译器插件的信息?
-
Gradle脚本在groovy程序中声称技术上是不正确的,因为gradle以某种方式扩展了Groovy编程语言?
-
有没有办法让
gradle
命令打印出编译器插件运行后生成的基本groovy代码?
1 回答
Gradle使用AST Transformations来扩展Groovy语法 . 您提到的任务定义语法只是Gradle应用的转换之一 . 您可以找到该转换的实现here . 回答您的具体问题:
Gradle应用的单个变换没有具体记录在我所知道的任何地方 . 但是,您可以查看上面链接的同一个包中的其他类 .
Gradle脚本支持超级Groovy语法集 . 任何有效的Groovy在Gradle脚本中也是有效的,但是,Gradle脚本不一定(通常不是)有效的“默认”Groovy .
没有办法获得等效的Groovy代码的输出,因为它是在内存中被操作的实际抽象语法树 .