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的可读性。
原文:http://6169621.blog.51cto.com/6159621/1564278