理解gradlegroovy语义

理解gradlegroovy语义,gradle,groovy,Gradle,Groovy,我很难理解gradle脚本的语义w.r.t如何在groovy中看到它们 1) 下面的片段是什么意思 task copy(type: Copy) { into "target" with baseSpec } 据我所知,在我看来,任务是用一个命名参数“type”和它的值“Copy”实例化的。我不知道什么是“进入”,“与”。它们是任务类的参数吗?顺便问一下,任务是类还是接口 2) 什么是“脚本块”?结束了吗? 3) 什么是“行动”?它们也是用匿名类实例化的接口的闭包或对象吗 基本上,我

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

1) 下面的片段是什么意思

task copy(type: Copy) {
   into "target"
   with baseSpec
}
据我所知,在我看来,任务是用一个命名参数“type”和它的值“Copy”实例化的。我不知道什么是“进入”,“与”。它们是任务类的参数吗?顺便问一下,任务是类还是接口

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


基本上,我不知道如何将所有这些结合起来作为一个普通的groovy?

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
    setProperty
    ,…动态添加行为

    object.somefun "42"
    object.missingMethod("somefun", ["42"])
    
  • 在闭包中,有一个特殊的对象,称为delegate。它可以在运行时设置,任何非本地属性或方法调用都可以委托给该委托

    def fun = { copy "this_file" }
    def fun = { delegate.copy("this_file") }
    
    请参见或查看生成器模式

使用此属性,可以编写脚本(由于AST转换,脚本不是真的):

delegate
是一个对象,它实现
missingMethod
,并基于方法调用和上下文生成对象

更复杂的脚本:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
    }
}
相当于:

buildscript({ it -> 
  delegate.repositories({delegate.mavenCentral()})
  delegate.dependencies({delegate.classpath([group:'commons-codec', name:'commons-codec', version:'1.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
    setProperty
    ,…动态添加行为

    object.somefun "42"
    object.missingMethod("somefun", ["42"])
    
  • 在闭包中,有一个特殊的对象,称为delegate。它可以在运行时设置,任何非本地属性或方法调用都可以委托给该委托

    def fun = { copy "this_file" }
    def fun = { delegate.copy("this_file") }
    
    请参见或查看生成器模式

使用此属性,可以编写脚本(由于AST转换,脚本不是真的):

delegate
是一个对象,它实现
missingMethod
,并基于方法调用和上下文生成对象

更复杂的脚本:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
    }
}
相当于:

buildscript({ it -> 
  delegate.repositories({delegate.mavenCentral()})
  delegate.dependencies({delegate.classpath([group:'commons-codec', name:'commons-codec', version:'1.2'])})
})

谢谢这很有帮助。你能按语法把它分解吗?任务(复制([type:copy],{it->delegate.into(“target”)delegate.with(baseSpec)})谢谢。这很有帮助。你能不能从语法上分解这个任务(复制([type:copy],{it->delegate.into(“target”)delegate.with(baseSpec)}))的可能重复