Gradle Cheat Sheet (3): Task Configuration
类似于Groovy的封包可以有委托对象,Gradle编译脚本委托给了一个project对象,Gradle DSL中的所有关键词都是这个project对象的属性或方法。
Contents [show]
1. 声明任务
project对象有task()方法用于声明任务,它接受一个任务名称和一个配置封包作为参数。下面声明一个名为“myTask1”的任务:
project.task("myTask1")
project.task("myTask1")
project.task("myTask1")
因为整个Gradle编译脚本都委托给了project,可以省略project:
task("myTask2")
task("myTask2")
task("myTask2")
更进一步地,Groovy可以省略参数的括号:
task "myTask3"
task "myTask3"
task "myTask3"
甚至可以省略双引号:
task myTask4
task myTask4
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,"
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.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"}
myTask4.doLast {println "Do this last"}
myTask4.doLast {println "Do this last"}
可以通过doFirst 把一个闭包添加到动作列表的开头:
myTask4.doFirst {println "Do this first"}
myTask4.doFirst {println "Do this first"}
myTask4.doFirst {println "Do this first"}
也可以使用leftShift 或<< 加入动作到列表末尾:
myTask4.leftShift {println "Do this even more last"}
myTask4 << {println "Do this last of all"}
myTask4.leftShift {println "Do this even more last"}
myTask4 << {println "Do this last of all"}
myTask4.leftShift {println "Do this even more last"} myTask4 << {println "Do this last of all"}
执行myTask4:
$ gradle myTask4
$ gradle myTask4
$ gradle myTask4
输出为:
Do this first
Do this last
Do this even more last
Do this last of all
Do this first
Do this last
Do this even more last
Do this last of all
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"
}
task myTask5 << {
println "Here's how to declare a task and give it an action in one stroke"
}
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 myTask6 {
description "Here's a task with a configuration block"
group "Some group"
doLast {
println "Here's the action"
}
}
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"
}
task myTask8(description: "Another description") << {
println "Doing something"
}
task myTask8(description: "Another description") << { println "Doing something" }
但不是所有属性都支持这种方法,详见这里。配置任务属性的位置一般从可读性的角度来选择,但如果要给任务配置type,就一定要在这里配置。
本部分的完整代码可以在这里找到。