现在我们对groovy有了一些了解,接下来我们将会从一个更好理解的角度去分析gradle脚本到底是怎么回事.
像一个闭包可以有一个代理对象一样,整个gradle build 脚本,代表着一个project对象,gradle 构建脚本中所有的关键字都是project对象中对应的属性或方法.
例如:project对象有一个用来声明任务的方法叫 task,它接受一个新task的名称和一个设置的闭包
project.task("myTask1")
由于整个 build的脚本代表project对象,因此project可以省略,为下面的形式
task("myTask2")
还由于groovy语法优秀,可以省略括号,所以还可简化为
task "myTask3"
还可以省去双引号,最终结果,我们可以声明一个 task
task myTask4
myTask4.description = "This is what's shown in the task list"
myTask4.group = "This is the heading for this task in the task list,"
myTask4.doLast {println "Do this last"}
myTask4.doFirst {println "Do this first"}
// 除了声明一task之后再给其属性赋值,我们可以给task赋一个配置的闭包的值
task myTask6 {
description "Here's a task with a configuration block"
group "Some group"
doLast {
println "Here's the action"
}
}
理解这个配置的闭包,有两个重要的部分:
1.闭包被赋值,它的代表着task对象,意味着是当你赋真给group时,实际上是赋值给了task.group
2.task对象的属性拥有同样名称的setter方法,这就是为什么我们赋值给属性,而省去同样的赋值,实际上是我们调用settter方法,省略了括号
结果是,我们必须当给属性赋值时我们用"="赋值,或着省去"()"括号,如下所示
task myTask7 {
description("Description") // Function call works
//description "Description" // This is identical to the line above
group = "Some group" // Assignment also works
doLast { // We can also omit the parentheses, because Groovy syntax
println "Here's the action"
}
}
另一个很重要的语法是:有一些task属性,你可以通过如下方式设置
当然不是全部属性可可这样赋值,具体你可以查看官方文档https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/
task myTask8(description: "Another description") {
doLast {
println "Doing something"
}
}