gradle-task的使用

新建一个gradle-Java项目

工程创建

默认的 build.gradle 文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
plugins {
    id 'java'
}

group 'fluffy.mo'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

创建task

build.gradle 添加以下示例task

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
task t01 {
    group("sample-learn")
    println("sample-011")
}

tasks.create(name: 't02', group: "sample-learn") {
    println("sample-022")
}

task("t03", {
    group("sample-learn")
    println("sample-033")
})

运行gradle t01后结果

1
2
3
4
> Configure project :
sample-011
sample-022
sample-033

task 依赖执行

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
task mydepOn_01 {
    group("sample-learn")
    dependsOn("mydepOn_02")
    println("mydepOn-部署阶段-01")
    doLast {
        println("mydepOn-执行阶段-01")
    }
}
task mydepOn_03 {
    group("sample-learn")
    println("mydepOn-部署阶段-03")
    doLast {
        println("mydepOn-执行阶段-03")
    }
}
task mydepOn_02 {
    group("sample-learn")
    println("mydepOn-部署阶段-02")
    doLast {
        println("mydepOn-执行阶段-02")
    }
}
mydepOn_02.dependsOn(mydepOn_03)

执行任务 mydepOn_02 后结果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
> Configure project :
mydepOn-部署阶段-01
mydepOn-部署阶段-03
mydepOn-部署阶段-02

> Task :mydepOn_03
mydepOn-执行阶段-03

> Task :mydepOn_02
mydepOn-执行阶段-02

由运行结果上看
任务 mydepOn_02 依赖 mydepOn_03, 所以 mydepOn_03先执行,没啥毛病 。
但 部署序号的打印是咋回事??

task的两个运行阶段

上面两小节的运行结果 > Configure project : 这段可知: gradle在执行task时,会先装载所有的task,并且顺序执行所有task的 部署阶段的代码
然后再调用指定task名称的 所有闭包任务

一个工程对象中, 可以有多个task 。 一个task中, 可以有多个闭包任务。

下面演示闭包任务的 执行顺序问题

task - doFirst、doLast

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
task mylast {
    group("sample-learn")
/**
 * 该示例执行结果 证明 -- doLast添加的闭包靠后执行
 * > Task :mylast
 * mylast-执行阶段-前面-01
 * mylast-执行阶段-前面-02
 * mylast-执行阶段01
 * mylast-执行阶段02
 */
    println("mylast-部署阶段")
    doLast {
        println("mylast-执行阶段01")
    }
    doLast {
        println("mylast-执行阶段02")
    }
    doFirst {
        println("mylast-执行阶段-前面-02")
    }
    doFirst {
        println("mylast-执行阶段-前面-01")
    }
}

执行任务 mylast 后结果

1
2
3
4
5
6
7
8
> Configure project :
mylast-部署阶段

> Task :mylast
mylast-执行阶段-前面-01
mylast-执行阶段-前面-02
mylast-执行阶段01
mylast-执行阶段02