Gradle里的task用来描述构建中不可分割的原子任务,例如编译,打包JAR,生存javadoc等,都是task。
定义Task
定义Task
1
2
3
4
5
| task hello {
doLast {
println "Hello World!"
}
}
|
简单定义Task
1
2
3
4
5
| task upper << {
String someString = 'mY_nAmE'
println "Original: " + someString
println "Upper case: " + someString.toUpperCase()
}
|
注意:
- 这里直接使用“<<”来定义Task,“<<”是doLast的别名
- 定义Task的时候就是写代码,这里先定义了一个变量,然后调用toUpperCase方法
另外一个Task
1
2
3
| task count << {
4.times { print "$it " }
}
|
运行Task
1
2
| gradle -q hello
Hello World!
|
其中:
- -q是gradle的命令行参数,用于阻止gradle的log输出,这样就只输出gradle脚本里输出的内容。
- Hello World!是我们定义的task的输出。
Task依赖
Task依赖
1
2
3
4
5
6
| task hello << {
println 'Hello world!'
}
task intro(dependsOn: hello) << {
println "I'm Gradle"
}
|
- 使用dependsOn来定义当前task依赖的task
- 依赖的Task可以在当前的Task之后定义
动态Task
Task依赖
1
2
3
4
5
6
| 4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
task0.dependsOn task2, task3
|
- 使用counter作为变量,在定义task的时候使用“task$counter”会动态定义出task0,task1,task2,task3
- task0.dependsOn task2, task3通过调用task0的dependsOn的方法,也可以定义Task的依赖
Task的API
Task API
1
2
3
4
5
6
7
8
9
10
11
12
| task hello << {
println 'Hello Earth'
}
hello.doFirst {
println 'Hello Venus'
}
hello.doLast {
println 'Hello Mars'
}
hello << {
println 'Hello Jupiter'
}
|
- doFirst和doLast可以被执行多次
- 定义完task之后,就可以调用doLast,doFirst和<<
Task的属性
Task API
1
2
3
4
5
6
| task myTask {
ext.myProperty = "myValue"
}
task printTaskProperties << {
println myTask.myProperty
}
|
- 在定义Task的时候,使用ext.myProperty为Task添加属性
- 在别的Task里,直接使用myTask.myProperty来访问Task的属性
定义函数
Task API
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| task checksum << {
fileList('../antLoadfileResources').each {File file ->
ant.checksum(file: file, property: "cs_$file.name")
println "$file.name Checksum: ${ant.properties["cs_$file.name"]}"
}
}
task loadfile << {
fileList('../antLoadfileResources').each {File file ->
ant.loadfile(srcFile: file, property: file.name)
println "I'm fond of $file.name"
}
}
File[] fileList(String dir) {
file(dir).listFiles({file -> file.isFile() } as FileFilter).sort()
}
|
- 在后面定义了fileList函数
- 在定义Task的时候,调用fileList函数
默认Task
Task API
1
2
3
4
5
6
7
8
9
10
| defaultTasks 'clean', 'run'
task clean << {
println 'Default Cleaning!'
}
task run << {
println 'Default Running!'
}
task other << {
println "I'm not a default task!"
}
|
- 使用defaultTasks ‘clean’, ‘run’定义哪些task是默认的
- 可以定义多个默认的Task