我很难理解gradle脚本的语义w.r.t如何在groovy中看到它们。
1)以下代码段是什么意思?
task copy(type: Copy) {
into "target"
with baseSpec
}
据我所知,在我看来,任务是使用命名参数" type"来实例化的。它的价值"复制"。我不知道"进入",""。它们是任务类的参数吗? BTW,任务是一个类还是接口?
2)什么是"脚本块"?是关闭吗? 3)什么是"行动"?它们也是用匿名类实例化的闭包或接口对象吗?
基本上,我迷失了如何将所有这些放在一起作为一个普通的常规?
答案 0 :(得分:2)
Groovy是一种用于构建DSL(域特定语言)的强大语言。 Gradle和其他许多库一样使用它。
它基于Groovy的几个属性
括号是选项
fun("myparameter")
fun "myparameter"
您可以在方法上设置命名参数
fun prop:'value', otherprop:'othervalue'
fun([prop:'value', otherprop:'othervalue'])
如果方法的最后一个参数是闭包,则可以在方法调用之外写入
fun(prop:'value') {
//..closure call
}
fun([prop:'value'], { /*closure*/ })
您可以在groovy对象上获取/设置任何属性或调用任何方法:您可以通过missingMethod
,missingProperty
,getProperty
或{{1}动态添加行为,},
setProperty
在一个闭包中,你有一个特殊的对象,叫做委托。它可以在运行时设置,任何非本地属性或方法调用都可以委托给这个委托
object.somefun "42"
object.missingMethod("somefun", ["42"])
请参阅this documentation或构建器模式
使用此属性,您的脚本可以编写(由于AST转换,它不是真的。):
def fun = { copy "this_file" }
def fun = { delegate.copy("this_file") }
task(copy([type: Copy], { it ->
delegate.into("target")
delegate.with(baseSpec)
}))
是一个实现delegate
的对象,它根据方法调用和上下文生成对象。
更复杂的脚本:
missingMethod
相当于:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
}
}