@xtccc
2016-02-11T22:40:12.000000Z
字数 1434
阅读 2311
Gradle
我们可以在tasks之间定义依赖,Gradle将保证这些tasks将按照它们之间的依赖关系被执行,并且每一个task只会被执行一次。这些tasks构成一个DAG。
Gradle build有三个阶段:
Initialization
该阶段,Gradle确定哪些项目将参与构建过程,并为每一个项目创建一个Project
实例
Configuration
该阶段,Gradle将配置project objects。构建过程涉及到的所有项目的build scripts都会被执行,e.g., 下载所有用 apply plugin
声明的plugins。在执行任一task之前,要完成对所有项目的configuration。
Execution
该阶段,Gradle将决定哪些tasks将会被执行(这些tasks是在configuration阶段被创建和配置的)。这些将被执行的tasks是由传给 gradle 命令的task name参数及当前目录决定的。随后,Gradle会执行每一个被选中的task。
除了build script files之外,Gradle还定义了settings文件 —— Gradle会通过命名约定来确定settings文件,默认的名字是settings.gradle。
Settings文件将在Initialization阶段被执行。如果构建过程涉及到多项目,则master project必须包含settings文件,该文件将指定哪些subprojects将参与构建过程;如果构建过程只有一个项目,则可以没有settings文件。
除了在settings文件中指定要包含哪些subprojects之外,我们还可以通过该文件向build script classpath添加libraries。
假设我们有一个单项目要构建,settings.gradle 与 build.gradle 文件分别定义如下:
settings.gradle
println '我是settings.gradle文件 ,我在Initialization阶段被执行'
build.gradle
println '我是 build.gradle文件,我在configuration阶段被执行'
task Configured {
println '我是task [Configured],我在`configuration`阶段被执行'
}
task Test {
println '我是task [Test],我在`configuration`阶段被执行'
}
task TestBoth {
doFirst {
println '我是task [TestBoth],我 `doFirst`,我将在execution阶段被执行'
}
doLast {
println '我是task [TestBoth], 我 `doLast`, 我将在execution阶段执行'
}
println '我是task [TestBoth], 我在`configuration`阶段被执行'
}
运行命令gradle Test TestBoth
,输出如下: