Yaodan's Blog

Gradle学习笔记-1:基础知识

| Comments

Hello World

在Gradle中,每一个build都由一个或多个project组成,而每一个project都由一个或多个task组成。

这是一个task的Hello World:

build.gradle
1
2
3
4
5
task hello {
    doLast {
        println 'Hello World'
    }
}

当执行命令:gradle -q hello时输出:

gradle -q hello
1
Hello World

至于这个参数-q是什么意思,我们可以试试不加参数时的输出:

gradle hello
1
2
3
4
5
6
:hello
Hello World

BUILD SUCCESSFUL

Total time: 1.879 secs

可以看到,-q的意思不显示Gradle本身的log。

对于上面的doLast块,有一种简写的方式:

build.gradle
1
2
3
task hello << {
    println 'Hello World'
}

使用Groovy

在Gradle脚本中可以使用Groovy的语法,如下:

build.gradle
1
2
3
4
5
task upper << {
    String someString = 'mY_nAmE'
    println "Original: " + someString
    println "Upper case: " + someString.toUpperCase()
}

当执行gradle -q upper时,输出如下:

gradle -q upper
1
2
Original: mY_nAmE
Upper case: MY_NAME

Task之间的依赖

build.gradle
1
2
3
4
5
6
7
task hello << {
    println 'Hello world!'
}

task intro(dependsOn: hello) << {
    println "I'm Gradle"
}

执行结果如下:

gradle -q intro
1
2
Hello World
I'm Gradle

动态Task

在Gradle里面,Task是可以动态定义的,如下:

build.gradle
1
2
3
4
5
6
7
8
9
10
11
4.times { counter ->
    task "task$counter"(dependsOn: "depending$counter") << {
        println "I'm task number $counter"
    }
}

4.times { counter ->
    task "depending$counter" << {
        println "I'm depending number $counter"
    }
}

执行结果如下:

gradle -q task1
1
2
I'm depending number 1
I'm task number 1

多次定义Task的依赖

build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
4.times { counter ->
    task "task$counter"(dependsOn: "depending$counter") << {
        println "I'm task number $counter"
    }
}

task0.dependsOn task1, task2

4.times { counter ->
    task "depending$counter" << {
        println "I'm depending number $counter"
    }
}

执行结果如下:

gradle -q task0
1
2
3
4
5
6
I'm depending number 0
I'm depending number 1
I'm task number 1
I'm depending number 2
I'm task number 2
I'm task number 0

这里可以看到,Task执行的顺序是根据定义的顺序执行的,如果还有doFirst,则先执行doFirst:

build.gradle
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'
}

执行结果如下:

gradle -q hello
1
2
3
4
Hello Venus
Hello Earth
Hello Mars
Hello Jupiter

默认task

gradle中可以定义默认的task,定义后直接使用gradle命令就可以执行这些task,代码如下:

build.gradle
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!"
}

执行结果如下:

gradle -q
1
2
Default Cleaning!
Default Running!

在这里,执行gradle等价于执行gradle clean run

Comments