gradle的多层级的父子项目构建

现在很多复杂的项目从maven构建转为gradle的构建,具体性能对比可以查找资料说明。这里来说明一个多层级的父子项目使用gradle构建情况:

 直接上图上码来说明:

例如项目结构如下图:

      

则在Settings.gradle中设置如下:

rootProject.name = 'xxl-job'
include ':xxl-job-core'
include ':xxl-job-admin'
include ':xxl-job-executor-sample-springboot'

project(':xxl-job-core').projectDir = "$rootDir/xxl-job-core" as File
project(':xxl-job-admin').projectDir = "$rootDir/xxl-job-admin" as File
project(':xxl-job-executor-sample-springboot').projectDir = "$rootDir/xxl-job-executor-samples/xxl-job-executor-sample-springboot" as File

 

具体原理看Settings.gradle的解析说明:

Gradle对构建模块化项目提供了强大的支持,在Gradle中每一个模块都是一个项目,称之为Gradle多项目构建技术,多项目构建实现了项目模块化,降低代码耦合度,增加内聚性,本篇文章将简单介绍如何使用Gradle进行多项目构建。

 

1、组装多项目构建

Gradle整个项目是由一个根目录和多个模块的子目录构成,在根目录下新建build.gradle构建脚本,使用gradle projects命令查看所有参与构建的项目:

 
  1. > Task :projects

  2. //只有一个根项目,无子项目

  3. ------------------------------------------------------------

  4. Root project

  5. ------------------------------------------------------------

  6. Root project 'root'

  7. No sub-projects


示例中使用的多项目层次结构如下图,定义了3个子项目:

这里写图片描述
①settings文件介绍:使用过Gradle构建项目的都应该知道这个文件,该文件声明了项目层次结构所需的配置。默认情况下,这个文件被命名为settings.gradle,并且和根项目的build.gradle文件放在一起。简单配置settings.gradle文件:

 
  1. //settings.gradle脚本:

  2. include 'model'

  3. include 'repository', 'web'

  4.  
  5. //再次运行gradle projects命令,可以看出多了3个子项目:

  6. > Task :projects

  7. ------------------------------------------------------------

  8. Root project

  9. ------------------------------------------------------------

  10. Root project 'root'

  11. +--- Project ':model'

  12. +--- Project ':repository'

  13. \--- Project ':web'


②settings API的理解:Gradle在组装构建之前,会创建一个Settings实例,Settings接口是settings文件的直接表示,它的主要作用就是添加Project实例参与多项目构建,下图显示了Settings接口的相关方法:

这里写图片描述
我们可以在settings.gradle文件中直接使用这些相关的API进行编码,例如调用了include(String)方法将子项目添加到多项目的构建中。

③settings执行的阶段:在介绍task的使用时说到了构建过程的三个生命周期:初始化、配置和执行。那么是在哪个阶段解析执行settings文件中的代码的呢?可以想到的是,它肯定是在Project实例配置之前进行实例化的:

这里写图片描述
④如何找到settings文件:只要根项目或者任何子项目的目录中包含构建文件,Gradle就运行你从相应的位置运行构建。 Gradle是如何知道一个子项目是一个多项目构建的一部分的呢?它需要找到settings文件,这个文件指示了子项目是否包含在多项目构建中。步骤:①首先Gradle在与当前目录同层次的master目录下搜索settings文件,②找不到则在父目录下查找settings文件,下图分别对应这两种情况:

这里写图片描述
⑤项目的两种布局:分层布局和平面布局,android项目中使用的就是分层布局。对于平面布局来说,要想包括与根项目同一嵌套层次的项目,需要使用includeFlat方法,下图分别对应的是分层布局和平面布局:

这里写图片描述
 

2、子项目的构建文件

每个子项目的构建需要在子项目的目录下新建一个build.gradle构建脚本,该目录树如下图:

这里写图片描述
①根项目构建脚本:

 
  1. /**为所有项目(包括根项目和所有子项目)设置group和version属性*/

  2. allprojects {

  3. group = 'com.manning.gia'

  4. version = '0.1'

  5. }

  6. /**所有子项目应用Java插件*/

  7. subprojects {

  8. apply plugin: 'java'

  9. }


②子项目构建脚本:一般在子项目构建脚本中不声明任何代码也是可以的,除非有一些其它的需求,例如web子项目的构建脚本如下:

 
  1. /**应用war插件*/

  2. apply plugin: 'war'

  3. /**声明中心仓库*/

  4. repositories {

  5. mavenCentral()

  6. }

  7. dependencies {

  8. /**定义依赖了repository子项目*/

  9. compile project(':repository')

  10. }


3、定义不同的构建脚本名称

标准的Gradle构建文件名是build.gradle,但是也许有必要使用一些更具有表达性的名称来命名构建文件。想使用自定义的构建脚本文件名,关键在于settings文件。假如项目结构如下图:

这里写图片描述

 
  1. include 'todo-model', 'todo-repository', 'todo-web'

  2.  
  3. /**更改构建文件,将build.gradle 更换成更有意义的命名,如 model.gradle

  4. * it.name 是子项目名:todo-model todo-repository todo-web*/

  5. rootProject.children.each {

  6. /**设置构建脚本文件名*/

  7. it.buildFileName = it.name + '.gradle' - 'todo-'

  8. }


以上简单介绍多项目构建的原理,settings文件如何实现基本的配置,如何是一个项目作为子项目添加到构建中等。还是那句话,知其所以然能够让你得心应手。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木鱼-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值