首页 > 代码库 > Gradle

Gradle

gradle入门资料

三:读懂gradle语法
  Gradle是一种声明式的构建工具。在执行时分2个阶段:配置阶段,执行阶段。
  在配置阶段,gradle会读取build.gradle的所有文件来配置project和task(譬如配置project和task的property,处理task之间的依赖)
 
  对于每一个task,gradle会在Project中创建一个同名的Property,所以我们可以将该Task当作Property来访问。  譬如:   

task showDescription2 << {   
    println description
  }
  showDescription2.description = ‘this is task showDescription‘

  就是这种情况除此之外,gradle还会创建一个同名的方法,该方法接受一个闭包,我们可以使用该方法来配置task.譬如:

task showDescription3 << {   
  println description
}
showDescription3 {   
  description = ‘this is task showDescription‘
}

  要读懂Gradle,我们首先要了解Groovy语言的2个概念:一个Groovy的Bean概念,一个Groovy闭包的delegate机制

  Groovy的Bean概念和Java的不同,它会为每一个字段自动生成getter和setter,并且我们可以像访问字段本身一样调用getter和setter.  

class GroovyBeanExample {   
  private String name
}
def bean = new GroovyBeanExample()
bean.name = ‘this is name‘
println bean.name

我们并不是在直接访问name属性,当我们执行"bean.name = ‘this is name‘"时,我们实际调用的是"bean.setName(‘this is name‘)"。

    另外,Gradle大量使用了Groovy闭包的delegate机制。简单的说,delegate机制可以将闭包中行代码的作用对象设置成任意其它对象。譬如:

class Child {
    private string name   //不加分号?
}
class Parent {
    Child child = new Child();
    
    void configChild(Closure c) {
        c.delegate = child 
        c.setResolveStrategy Closure.DELEGATE_FIRST  
      c()
    }
    
}
def parent = new Parent()

parent.configChild {
    name = "child name"
}

print parent.child.name

在调用parent.configChild时,先执行了void configChild(Closure c)中的代码,将该闭包中执行代码的作用对象设为child了,所以name = "child name"是child执行的。


    与Groovy Bean一样,delegate机制的一个好处是可以增加所创建的DSL的可读性。


Gradle