欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-23 14:11:44
现在很多复杂的项目从maven构建转为gradle的构建,具体性能对比可以查找资料说明。这里来说明一个多层级的父子项目使用gradle构建情况:直接上图上码来说明:例如项目结构如下图: 则在Settings.gradle中设置如下:rootProject.name = 'xxl-job'include ':xxl-job-core'include ':xxl-job-admin'include ':xxl-job-executor-sample-springboot......

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

gradle的多层级的父子项目构建
①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接口的相关方法:

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

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

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

gradle的多层级的父子项目构建
⑤项目的两种布局:分层布局和平面布局,android项目中使用的就是分层布局。对于平面布局来说,要想包括与根项目同一嵌套层次的项目,需要使用includeFlat方法,下图分别对应的是分层布局和平面布局:

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

2、子项目的构建文件

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

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文件。假如项目结构如下图:

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

 
  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文件如何实现基本的配置,如何是一个项目作为子项目添加到构建中等。还是那句话,知其所以然能够让你得心应手。

本文地址:https://blog.csdn.net/zzy7075/article/details/108848233

相关标签: gradle