1、前言
本篇主要讲述:gradle 多模块打 jar 包,上传本地仓库,并交由本地其他项目使用
2、环境准备
- 操作系统:mac os
- gradle 版本:4.1.0
- 开发软件:idea
注:gradle 版本不同,引入依赖方式可能不同,如果你发现本地导包是 OK 的,但是打包就报错,可以看看是不是 gradle 版本所引起的问题
3、多模块 gradle 文档
【gradle 多环境讲解,官方文档】,官方文档描述了多模块配置中的几个闭包的常规使用
allprojects{}, subprojects{}。前者配置应用包括 root 模块在内的所有模块,后者只应用子模块,详细的使用规则进入官方文档详细了解
4、项目实战
项目 1 结构
|──root-project-one 项目 1 名称
├── common-project 基础子项目
│ └── build.gradle 基础子项目配置文件
├── example-project 依赖 common 项目的示例项目
│ └── build.gradle 依赖 common 项目的示例项目的配置文件
├── build.gradle 项目 1 的配置文件
项目 2 结构
|──root-project-two 项目 2 名称
├── build.gradle 项目 2 的配置文件 (需要引用项目 1 中的 example-project)
各个项目的配置文件(此处只列举主要配置)
root-project-one/build.gradle
// 所有子项目共享配置
subprojects {
apply plugin: 'maven'
// 获取本地仓库路径
def localRepositoryPath = 'file://' + new File(System.getProperty('user.home'), '.m2/repository').absolutePath
// 打包至本地仓库配置
uploadArchives {
repositories {
//mavenDeployer 需要依赖 apply plugin: 'maven'
mavenDeployer {repository(url: localRepositoryPath)
pom.project {
name = project.name // 当前项目名称
version = project.version // 当前项目版本 0.0.1
groupId = project.group // 当前项目组 com.xxx
}
}
}
}
}
common-project/build.gradle
//jar SKIPPED 问题, 添加如下配置
jar.enabled=true //(不设置可能会无法打 jar)
example-project/build.gradle
dependencies {
// 依赖 common-project
compile project(':common-project')
}
//jar SKIPPED 问题, 添加如下配置
jar.enabled=true
上述配置完毕后刷新 gradle 配置,进入每个子模块中打开命令行执行如下命令进行打包
gradle -q uploadArchives
或者打开右侧的 gradle 面板,到模块下的 task>upload>uploadArchives,点击执行即可生成相关 jar
本地项目引用 jar
root-project-two /build.gradle
repositories {
// 优先查找本地 maven 库,性能最好
mavenLocal() // 注:引用本地 jar 包时,必须加上本地 maven 库
maven{url 'http://maven.aliyun.com/nexus/content/groups/public/'}
}
dependencies {
// 依赖本地 jar
compile('com.xxx:example-project:0.0.1')
}
5、总结
- gradle 版本可以通过修改项目下 gradle>wrapper>gradle-wrapper.properties 文件的 distributionUrl 对应地址的版本来修改,修改版本后需要刷新 gradle
- 当多模块相互依赖,打包给本地其他项目使用的时候,相互依赖的模块建议都打 jar 包上传本地仓库