利用gradle进行多模块架构,用于代码解耦
一:新建一个gradle工程
- 以springboot为例
- 选择gradle project
- 可以什么都不选
- 选择本地gradle
二:修改工程
- 删除src文件
- 修改build.gradle文件
plugins { // 引入 api 传递依赖的方法 用来代替compile id 'java-library' id 'org.springframework.boot' version '2.2.10.RELEASE' apply false id 'io.spring.dependency-management' version '1.0.10.RELEASE' apply false } ext { // 自定义扩展 字段 这里定义版本信息 jjwtVersion = '0.11.1' commonsLang3Version = '3.9' commonsCollections4Version = '4.4' commonsCodecVersion = '1.14' druidVersion = '1.1.23' mapstructVersion = '1.3.0.Final' querydslVersion = '4.3.1' // https://start.spring.io/actuator/info spring cloud 版本对应 json set('springCloudVersion', "Hoxton.SR8") set('springCloudAlibabaVersion', "2.2.1.RELEASE") } /* 所有子项目的通用配置 */ subprojects { /* 使用二进制插件 */ apply plugin: 'java' /* java是Gradle的核心插件,是内置的,内置插件不需要配置依赖路径 */ apply plugin: 'idea' /* 同上 让Gradle自动生成Intellij的项目文件*/ /* 注意gradle插件不再自动应用,所以这里需要指定 */ apply plugin: 'org.springframework.boot' /* 依赖管理插件仍然是一个spring-boot-gradle-plugin传递依赖,所以无需在build.gradle配置中明确列出此依赖。 */ apply plugin: 'io.spring.dependency-management' /* 依赖管理,用来传递spring的依赖 */ group = 'com.pay' version = '0.0.1' /* 项目版本 */ /* 指定jdk版本 */ sourceCompatibility = '1.8' /* java编译的时候缺省状态下会因为中文字符而失败 */ [compileJava, compileTestJava, javadoc]*.options*.encoding = 'UTF-8' repositories { mavenLocal() maven { url "http://maven.aliyun.com/nexus/content/groups/public/" } mavenCentral() } /* 添加通用依赖 */ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' } }
三:新建子模块
- 创建
创建方式和上面的创建工程的方式一样 - 删除文件(除src和build.gradle)
- 修改build.gradle
/* 子模块项目名,jar名 */ archivesBaseName = 'demo-two' jar.enabled = true /* 需要org.springframework.boot插件 不需要打包成可执行的jar*/ bootJar.enabled = false
- 由于这个模块只提供公共的utils,log,等,所以不需要启动类
- 在创建一个模块,创建方式同上,依赖于上一个子模块
build.gradlearchivesBaseName = 'demo-three' jar.enabled = true bootJar.enabled = true dependencies { implementation project(':demo-two') /* 子模块之间的依赖 */ }
四:修改父模块setting.gradle
/* 多模块构建 */
/* 父模块名称 */
rootProject.name = 'demo-one'
/* 引入子模块 */
include 'demo-two','demo-three'
五:修改gradle插件
删除demo-two,demo-three
展开demo-one里面由子模块的gradel插件,可统一执行脚本,如打包、
六:测试
启动项目
测试成功