理解Gradle-Groovy语义

时间:2016-02-14 08:09:56

标签: gradle groovy

我很难理解gradle脚本的语义w.r.t如何在groovy中看到它们。

1)以下代码段是什么意思?

task copy(type: Copy) {
   into "target"
   with baseSpec
}

据我所知,在我看来,任务是使用命名参数" type"来实例化的。它的价值"复制"。我不知道"进入",""。它们是任务类的参数吗? BTW,任务是一个类还是接口?

2)什么是"脚本块"?是关闭吗? 3)什么是"行动"?它们也是用匿名类实例化的闭包或接口对象吗?

基本上,我迷失了如何将所有这些放在一起作为一个普通的常规?

1 个答案:

答案 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对象上获取/设置任何属性或调用任何方法:您可以通过missingMethodmissingPropertygetProperty或{{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'
    }
}