下列内容来自《Building and Testing with Gradle》。
Gradle运行生命周期如下:
- Configuration phase: 运行configuration blocks
- Execution phase:运行task actions
Task action定义
在Gradle中,task是build activity的基本单元,由一系列的构建指令组合而成。Task是first-class object。
Task Action使用task
和<<
来定义:
1 | task hello << { |
其中<<
在此处表示为hello
任务添加一系列的操作(append a code block to the list of actions a task performs)。
上述表达式可以用下面的命令来等价:
1 | task hello |
Task配置
Task的定义与配置很像,差别在于task配置中不使用<<
。
1 | task initializeDatabase |
上述第1条声明一个task,第2条添加operation到task,第3条是task的配置。
运行上述build文件,可以得到下列结果:
1 | $ gradle -b scratch.gradle initializeDatabase |
Task是对象
Tasks are Objects
。和不同的对象一样,a task object可以含有方法(methods)和属性(properties)。
前述定义的Task,属于DefaultTask
,有以下一些方法。
dependsOn
被依赖的task会先执行。可以有不同的表示方法,结果是等效的。下面示例中定义的task依赖于两个其它task(只显示了4种方法):
1 | task world(dependsOn: [compileTestClasses, createSchema]) |
1 | task world |
1 | task world { |
1 | task world { |
doFirst
doFirst
中的代码会在对应的task action之前执行;多个doFirst
出现时,后出现的先运行,即遵照FILO规则。
1 | task setupDatabaseTest << { |
1 | task setupDatabaseTest << { |
doLast
doLast
中的代码会在对应的task action之后执行。多个doLast
出现时,先出现的先运行,即遵照FIFO规则。doLast
用法与doFirst
类似。
1 | task setupDatabaseTest << { |
Task type
除了DefaultTask
,task还有其它一些type。在task名字后面添加(type: typeName)
即可指定task type。
Copy
Copy task从一个目录拷贝文件到另一个目录。
1 | task copyFiles(type: Copy) { from 'resources' into 'target' include '**/*.xml', '**/*.txt', '**/*.properties' } |
Jar
从源文件生成jar
文件
1 | apply plugin: 'java' |