作者:lx比比2502869217 | 来源:互联网 | 2023-02-05 11:42
我无法理解gradle中的groovy语法.
如果命名参数(在groovy中)使用:
后缀,那么我假设代码apply plugin: 'java'
意味着调用该函数apply(plugin = 'java')
.这很奇怪,因为apply
甚至没有定义函数.以下在我的gradle脚本中给出了一个错误:
println apply.getClass()
> Could not get unknown property 'apply' for root project 'Simple' of type
org.gradle.api.Project.
那么apply
它定义的是什么?为什么上面的代码不打印apply
元素的类?
还有一件我觉得奇怪的事情如下:
dependencies {
compile 'org.slf4j:slf4j-api:1.7.12'
testCompile 'junit:junit:4.12'
}
语法表明包含的代码{}
是一个闭包,但是什么是compile
和testCompile
元素?如果它是一个闭包,那么上面的代码将只返回'junit:junit:4.12'
一个字符串,其余的应该无法编译.它看起来更像是地图的定义.但同样,如果上面的代码是数据,那么我应该能够在groovysh
shell中输入它.
groovy:000> dependencies {
compile 'org.slf4j:slf4j-api:1.7.12'
testCompile 'junit:junit:4.12'
}
groovy:001> groovy:002> groovy:003> ERROR groovy.lang.MissingMethodException:
No signature of method: groovysh_evaluate.dependencies() is applicable for argument types: (groovysh_evaluate$_run_closure1) values: [groovysh_evaluate$_run_closure1@b7c4869]
这对我来说很困惑.我认为gradle脚本只是groovy脚本,但似乎gradle DSL为groovy语言添加了元素.一个groovy clojure成为一个map,一个带有命名参数的函数调用变得不同.
有人可以在这个groovy DSL上启发我;)