gradle构建聚合工程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gradle构建聚合工程相关的知识,希望对你有一定的参考价值。

参考技术A 其实对于安卓开发来说,gradle已经应用于安卓应用的构建,本人之前也兼职过一年的安卓开发,也是gradle构建,所以深深感受到gradle在java应用构建方面确实非常强大。聚合工程我不用多说,现在springcloud遍地开花,一些分布式开发也都是使用的聚合工程。maven作为构建工具,往往xml文件展开后非常冗长,构建效率低下。关于gradle,你可以参看下面的两篇文章。

gradle聚合工程的官方文档件见 这里

使用 git命令 建立父工程目录

include指定包含子项目的项目名,这里使用idea建立的子项目已经自动添加进来了.如果没有添加相当于没有建立multi工程的父子关系,所以这个很重要.

在maven的multi工程中,我们需要在父工程的pom文件中指定依赖的版本号、公用依赖,如果使用了springboot或者springcloud还要指定具体的springboot和springcloud版本;在子工程还需要引入具体的依赖。gradle也是类似的。

这两个功能非常相似,前者指定包括rootprorject在内都要执行的task,后者只在子工程内执行task.可以参看 这里

子工程的build.gradle文件修改就看你具体的子工程需要哪些了.比如docker插件,打包镜像名称都是子工程各自定义的,所以只要是子工程各自独有的依赖和插件,你都可以在这里配置;与父工程相同的会覆盖父工程的。例如我在这只是定义一下打jar包的实例,如果你在子工程修改了version和baseName那么打包出来的就是子工程修改后的。

Android Gradle 插件Gradle 构建机制 ② ( Groovy 语言 DSL 特性 | settings.gradle 配置文件解析 | 配置子模块工程目录 | 顶层配置 )

文章目录


Gradle 构建工具 的本质是 Java 应用程序 , 是运行在 Java 虚拟机 上的 ; 在空白的目录中 执行该 Gradle 构建工具 , 可以 生成一系列的构建文件 ;





一、Groovy 语言 DSL 特性



之前在 Groovy 专栏 https://blog.csdn.net/shulianghan/category_11542621.html 学习了很多 Groovy 语法 , 涉及

  • 字符串
  • 循环控制
  • 集合声明与访问
  • 集合遍历
  • map 集合
  • Closure 闭包
  • Groovy 方法调用
  • Groovy 扩展方法
  • Groovy 脚本调用
  • Groovy 动态语言特性
  • MOP 元对象协议与元编程
  • 编译时元编程
  • Json / Xml 等序列化与反序列化

等内容 ;

但是在写 build.gradle 构建脚本 时 , 发现上面的内容都用不上 , 基本配置中只涉及到调用方法 , 传入一个 闭包 , 在闭包中配置各种参数 ;

在构建脚本中配置使用的都是 DSL ( Domain Specific Language , 领域特定语言 ) , 在 build.gradle 构建脚本中使用的是 Groovy DSL , 该语言专门用于配置 Gradle 构建脚本 ;

在 构建脚本 中 , 同样也可以使用 Groovy 语言 或 Kotlin 语言 的普通语法进行脚本编写 ;

Android Studio 工程中 app 模块下的 build.gradle 构建脚本 都是如下样式的 :

android 
    compileSdkVersion 31
    buildToolsVersion "30.0.3"

    defaultConfig 
        applicationId "kim.hsl.myapplication"
        minSdkVersion 18
        targetSdkVersion 31
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    

    buildTypes 
        release 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        
    
    compileOptions 
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    
    kotlinOptions 
        jvmTarget = '1.8'
    





二、settings.gradle 配置文件解析



settings.gradle 配置文件也是一个 Gradle 构建脚本 , 在其中也可以编写 Groovy 脚本执行 ;

settings.gradle 配置文件Gradle 构建工程 的重要文件 , 其内容如下 :

rootProject.name = "My Application"
include ':app'



1、配置子工程


如果 Gradle 构建的工程中 , 涉及到 多个子工程 , 就需要在 settings.gradle 配置文件 中配置各个子工程模块 ; 配置时 , 使用

include:模块名称

的格式进行配置 ; 如 模块名称为 " app " , 则使用如下配置进行配置 ;

include ':app'

上述代码中 ':app' 表示的是 模块的路径 , 其含义相当于 './app' ;

app 模块如果不在这里进行配置 , 则 app 模块就会被 Gradle 作为普通目录进行处理 , 不会参与到构建编译打包的流程中 ; 如下图所示 , 如果不配置 include ':app' , 左侧 app 目录就是普通的文件目录 ;



2、配置不同目录的子工程


include ':app' 配置中 , 冒号 " : " 相当于 " / " 符号 , 如果想要在不同的目录创建 Module 模块 , 如 在 hello 目录下创建 Hello1 模块 , 则需要进行

rootProject.name = "My Application"
include ':app'
include ':hello:hello1'

配置 , 相当于配置了 ./hello/hello1 目录 ;


3、顶层配置


rootProject 配置 是 最顶层配置的信息 , rootProject.name 配置的是当前的工程名 ,


注意 , 不是目录名称 , 该工程的目录名称是 " D:\\002_Project\\002_Android_Learn\\MyApplication2 " ;

以上是关于gradle构建聚合工程的主要内容,如果未能解决你的问题,请参考以下文章

maven maven项目构建ssh工程(父工程与子模块的拆分与聚合)

转帖:maven maven项目构建ssh工程(父工程与子模块的拆分与聚合)

Maven基础概念仓库构建与部属

Maven 工程的聚合与依赖

maven-聚合与继承

Redis构建文章聚合信息分类网站