任何一个构建系统都是由多个构建文件组成,如Ant是由build.xml组成,Maven是由pom.xml组成,Make是由makefile组成。这些构建脚本定义了一系列的规则来指定项目编译流程。

Gradle构建系统的组成

Gradle的构建系统是由以下几个文件组成

  • build.gradle 我们称这个文件为一个构建脚本,这个脚本定义了一个模块和编译用的tasks,它一般是放在项目的模块中,也可以放在项目的根目录用来作为编译结构全局设置,它是必须的

  • settings.gradle 它描述了哪一个模块需要参与构建。每一个多模块的构建都必须在项目结构的根目录中加入这个设置文件,它也是必须的

  • gradle.properties 用来配置构建属性,这个不是必须的
    settings.gradle和gradle.properties的用法都十分简单,这里就不再多加说明,后面会给出示例,看示例就能明白其用法,现在主要对build.gradle的进行说明。

Hello World

Gradle是基于Groovy语言的构建系统(这里并不会详细解释Groovy语法的使用,有需要请参考Groovy的官方文档 — Groovy语法),所以在构建脚本中可以使用Groovy语言来执行一些任务。

下面编写一个简单的build.gradle文件,定义一个task来打印hell world,如下所示:

1
2
3
4
5
task hello { //先定义一个hello的task
doLast { //实现doLast方法
println 'Hello world!'
}
}

然后在终端中运行gradle hello命令来执行这个task,就会看到以下输入内容:

1
2
3
> gradle hello
:hello
Hello world!

对于hello这个task,还可以使用更简单的定义方式,如下:

1
2
3
task hello << {
println 'Hello world!'
}

<< 就等价于 doLastdoLast 是gradle提供访问task任务的一个API,类似的还有 doFirst,当一个task被执行的时候,可以通过 doFirstdoLast 向task中动态添加操作。doFirstdoLast 会在task本身被执行之后才会被执行。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
task hello {
println 'Hello Earth'
}
hello.doFirst {
println 'Hello Venus'
}
hello.doFirst {
println 'Hello Mercury'
}
hello.doLast {
println 'Hello Mars'
}
hello << {
println 'Hello Jupiter'
}

输入如下所示:

1
2
3
4
5
6
Hello Earth
:hello
Hello Mercury
Hello Venus
Hello Mars
Hello Jupiter

Task依赖

上面示例展示了如何编写一个hello world的task,在Gradle中各个task并不是孤立的,它们可以是相互依赖的。要让一个task依赖另外一个task,只需要在task定义时加入 dependsOn: 说明即可,被依赖的task会优先依赖者被执行,例如:

1
2
3
4
5
6
task hello << {
println 'Hello world!'
}
task intro(dependsOn: hello) << {
println "I'm Gradle"
}

运行gradle intro命令后可以看到以下输出:

> gradle intro
Hello world!
I'm Gradle

原创不易,欢迎转载,但还请注明出处:waynell.github.io