上一篇文章对gradle基础概念进行了笔记https://blog.csdn.net/qq_20395245/article/details/105454881,这篇文件将对构建,插件编写和插件分析的基础进行记录。首先,还是使用笔记一中手动按照gradle wrapper官网说明声明构建的gradle-demo项目为例,由于gradle项目是可以被IDeaJ识别的,所以这里选用用IDeaJ直接Open打开,打开后可以看到在IDE中会先进行构建过程:
耐心等待,最后左下角gradle-demo:load build...变成gradle-demo:success就完成导入构建了,同时会发现gradle还执行了一个任务,输出了build.gradle中的println "helloworld"任务内容,这就引出了gradle lifecycle,也就是gradle生命周期。
Gradle生命周期:官方文档https://docs.gradle.org/current/userguide/build_lifecycle.html。
从官方文档中,我们可以了解到gradle生命周期有三个步骤:初始化-->配置-->执行。每个步骤会进行各自的工作,下面对每个步骤进行描述,这个生命周期有助于了解一个gradle文件中各个任务的执行顺序和执行结果。
(1)Initialization初始化阶段:
根据官方描述,gradle支持单项目及多项目构建,在初始化这个阶段,gradle会识别哪些项目会参与到构建当中,同时会为这些参与构建的项目分别创建各自的Project实例(Project是Gradle内部重要的一个属性,后面还会继续说明)。但是gradle怎么识别哪些项目要参与构建呢,文档中也做了说明,就是一个默认的settings.gradle文件,这个文件在初始化期间就执行完成了,如我们的gradle-demo中新建一个settings.gradle加上一段输出,在build.gradle中也加上一段输出,重新构建这个项目可以看到:
会先输出settings.gradle里的内容,然后再进行build.gradle的构建,这也就能解释gradle在构建前可以识别哪些项目需要参与到真正构建的原因了。特别说明的是对于多项目构建必须要有这个settings file,当引入其他项目时需要使用include声明并引入到 build script classpath中,例如settings.gradle定义,其中projectXXX这些项目是需要进行编译才能被使用,可以提前编译或在gradle中进行compile编译:
include 'project1', 'project2:child', 'project3:child1'
project(':projectA')
对于子项目的调用可以使用project.subproject.XXXX方式。另外对于单项目构建这个setting file是可选的。
(2