Gradle项目树
Posted 清箫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gradle项目树相关的知识,希望对你有一定的参考价值。
在多项目构建中,项目的结构用树结构表示。初始化阶段,settings.gradle负责创建一棵由一系列ProjectDescriptor组成的项目树,当这棵树组装完毕,接着Gradle就根据这棵由ProjectDescriptors组成的项目树再创建一个由一系列Project对象组成的项目树。
也就是说,在初始化阶段,我们在settings.gradle中操作的是ProjectDescriptor,而在配置和执行阶段,我们在build.gradle中操作的是Project。
准备
Settings.gradle的位置
默认情况下,settings.gradle文件和build.gradle文件的位置相同。
而在没有settings.gradle文件的项目中,如果执行构建,则Gradle按这个顺序查找settings.gradle:
- 从当前目录的master文件夹内寻找。
- 如果master目录中也没有,则搜索父目录。
- 如果父目录也没找到,则把构建当成单个项目构建。
- 如果找到了,并且发现当前项目是多项目构建的一部分,则执行多项目构建。没找到,则执行单项目构建。
从第二步中可以看出,Gradle支持从子项目中触发构建父项目。如果不想从子项目触发父项目,而只是做单项目构建,则应该在gradle命令后加上-u命令行选项。
项目位置
默认情况下,项目的路径和项目在文件系统中的目录位置是一致的,比如projectA:child对应的目录地址为projectA/child,除非在settings.gradle中被重新定义了。同时,项目路径默认都是相对路径。
根项目
在默认情况下,settings.gradle文件所在的目录就是根项目的位置,除非在settings.gradle中被重新定义。
根项目在settings.gradle和build.gradle中,都是通过rootProject引用。
项目树布局
Settings.gradle创建的项目树由一系列ProjectDescriptior组成,根项目的ProjectDescriptor在Gradle中的引用名称为rootProject。
Gradle在评估项目树的时候是从根节点往子节点按广度优先顺序(从上而下,同一层是从左至右)评估的。所以,项目树的布局,直接影响子项目的评估顺序(参考Gradle生命周期)。
子项目作为项目树叶子节点的加入方式有两种:分层布局或扁平布局。
分层布局
include'project1', 'project2:child', 'services:hotels:api'
因为项目路径默认等价于文件系统的相对地址,所以路径services:hotels:api默认对应的目录为:services/hotels/api。但需要注意的是在分层布局中,services:hotels:api等于创建了三个项目,即services,services:hotel和services:hotels:api。
分层布局适合用于子项目位于根项目目录之中的情况。
扁平布局
includeFlat'project3', 'project4'
扁平布局意味着子项目的目录位置和根项目的目录是平行结构,是兄弟关系。
扁平布局适合用于子项目目录和根项目目录平行的情况。
修改项目描述
前面的分层布局和扁平布局只是负责创建相应项目的ProjectDescriptor,如果你的子项目和默认的配置不同,比如文件位置,构建脚本位置都不在常规位置,则需要在include之后修改。
include ':projectA'
project(':projectA').projectDir= new File(settingsDir, '../my-project-a')
project(':projectA').buildFileName= 'projectA.gradle'
以上是关于Gradle项目树的主要内容,如果未能解决你的问题,请参考以下文章