Gradle Cheat Sheet (3): Task Configuration
类似于Groovy的封包可以有委托对象,Gradle编译脚本委托给了一个project对象,Gradle DSL中的所有关键词都是这个project对象的属性或方法。
1. 声明任务
project对象有task()方法用于声明任务,它接受一个任务名称和一个配置封包作为参数。下面声明一个名为“myTask1”的任务:
project.task("myTask1")
因为整个Gradle编译脚本都委托给了project,可以省略project:
task("myTask2")
更进一步地,Groovy可以省略参数的括号:
task "myTask3"
甚至可以省略双引号:
task myTask4
这里Gradle使用了AST Transformations对Groovy的语法进行了扩展,详见这里。
2. 设置描述和分组
可以通过description和group设置任务的描述和分组:
myTask4.description = "This is what's shown in the task list" myTask4.group = "This is the heading for this task in the task list,"
3. 添加动作
3.1. 在声明任务后添加动作
任务最重要的属性是它所要执行的动作列表,可以使用doLast 把一个闭包添加到动作列表的末尾:
myTask4.doLast {println "Do this last"}
可以通过doFirst 把一个闭包添加到动作列表的开头:
myTask4.doFirst {println "Do this first"}
也可以使用leftShift 或<< 加入动作到列表末尾:
myTask4.leftShift {println "Do this even more last"} myTask4 << {println "Do this last of all"}
执行myTask4:
$ gradle myTask4
输出为:
Do this first Do this last Do this even more last Do this last of all
3.2. 在声明任务时添加动作
可以在声明任务时给出任务所要执行的动作:
task myTask5 << { println "Here's how to declare a task and give it an action in one stroke" }
3.3. 在声明任务时给出配置闭包
可以在声明任务时给出配置闭包,提供所要执行的动作:
task myTask6 { description "Here's a task with a configuration block" group "Some group" doLast { println "Here's the action" } }
理解这个配置闭包要注意两点:
- 它的委托是task对象,如果在里面配置group属性,实际配置的是task.group。
- task对象的属性具有同名的setter方法,所以配置属性时可以省略等号(相当于以省略括参数号的形式调用了setter方法)。需要注意的是,在把集合赋给属性时,必须要带等号或括号。
4. 配置任务属性的其他方法
部分任务属性还可以通过如下方法配置:
task myTask8(description: "Another description") << { println "Doing something" }
但不是所有属性都支持这种方法,详见这里。配置任务属性的位置一般从可读性的角度来选择,但如果要给任务配置type,就一定要在这里配置。
本部分的完整代码可以在这里找到。