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"
    }
}

理解这个配置闭包要注意两点:

  1. 它的委托是task对象,如果在里面配置group属性,实际配置的是task.group。
  2. task对象的属性具有同名的setter方法,所以配置属性时可以省略等号(相当于以省略括参数号的形式调用了setter方法)。需要注意的是,在把集合赋给属性时,必须要带等号或括号。

4. 配置任务属性的其他方法

  部分任务属性还可以通过如下方法配置:

task myTask8(description: "Another description") << {
    println "Doing something"
}

但不是所有属性都支持这种方法,详见这里。配置任务属性的位置一般从可读性的角度来选择,但如果要给任务配置type,就一定要在这里配置。

 

本部分的完整代码可以在这里找到。