Gradle核心之Task
前言
gradle命令最终是通过task去执行的,可见task在gradle中的重要性。
Task的定义与配置
task的定义有两种形式,一个是直接通过task函数去创建,另一个是通过task的create方法去创建,示例代码如下:
1 | task test1Task{ |
刚刚我们为task指定了一个name。我们可以看看除了name我们还可以指定什么,我们打开Task的源代码,如下:
1 | public interface Task extends Comparable<Task>, ExtensionAware { |
下面我们介绍下这些属性都是用来干嘛的。
字段 | 描述 | 默认值 |
---|---|---|
name | ask 名字 | 必须指定 |
description | task 的描述信息 | null |
group | 该 task 所属组 | null |
type | 需要创建的 task Class | DefaultTask |
dependsOn | 该 task 所依赖的 task 集合 | [] |
overwrite | 替换一个已存在的 task | false |
action | 当 task 执行的时候,需要执行的闭包 closure 或 行为 Action | null |
constructorArgs | 传递到 task Class 构造器中的参数 | null |
Task的执行
前面我们也介绍了gradle的生命周期,通过前面的文章我们可以知道,在执行阶段gradle会输出每个gradle执行的内容。当然我们还可以通过doFirst
和doLast
为我们的 task 指定执行阶段要执行的代码。关于这2个的属性介绍如下:
- doFirst :表示当前task执行最开始的时候被调用的Action。
- doLast:表示单曲task即将执行完的时候被调用的Action。
我们可以验证下上面两个属性,执行代码如下:
1 | task test1Task { |
输出结果如下:
1 | > Configure project : |
Task的执行顺序
首先了解下,控制task执行顺序的方式有两种。
- 通过dependsOn强依赖的方式
- 通过api指定执行顺序
dependsOn强依赖
强依赖的方式又分为两种,动态依赖及静态依赖,我们来举个例子:
1 | task test1Task { |
输出结果如下:
1 | > Configure project : |
需要注意的是,虽然我依赖了其他的task,但是依赖的task输出顺序它是随机的。
API指定输出顺序
关键字名称 | 作用 | 备注 |
---|---|---|
mustRunAfter | 指定一个任务必须执行在另一个任务之后 | 优先级小于dependsOn属性 |
shouldRunAfter | 指定一个任务应该执行在另一个任务之后 | 一般不用 |
举个栗子:
1 | task test2Task { |
为了方便查看,我们把顺序修改了,不让它按照1、2、3的形式输出,现在我们看看上述代码的输出结果:
1 | > Configure project : |
Task类型
除了定义一个task之外,我们也可以使用task的type属性来直接使用一个已有的 task 类型,比如Gradle自带的Copy、Delete、Sync等等。
总结
本节我们介绍了Task的使用,除了上面介绍的,我们还可以通过gradle官网去查看task相关指令。
参考
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 我就是马云飞!
评论