一直以来都在使用Maven来构建程序,更换为gradle后,一直不知道如何构建像maven结构一样的多模块应用,搜所了大量文章都不好用,特意google详细学习了一下,打造了一个通用的spring多模块构建,过程如下
1.新建一个gradle工程
2.将src 目录删除并修改父模块build.gralde配置
- 父模块配置 自行根据项目需求进行更改 .案例如下:
// 需要使用的插件.
plugins {
id 'org.springframework.boot' version "2.2.5.RELEASE"
}
// 版本号使用变量形式
ext {
springBootVersion = '2.2.5.RELEASE'
fastjsonVersion = '1.2.68'
mybatisPlusVersion = '3.3.1.tmp'
druidVersion = '1.1.20'
dynamicDatasource='3.0.0'
commonsMath3Version= '3.6.1'
qnVersion = '[7.2.0, 7.2.99]'
}
// 子模块配置
subprojects {
apply plugin: 'io.spring.dependency-management'
apply plugin: 'maven'
apply plugin: 'java'
apply plugin: 'idea'
group = 'cn.yhow'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenLocal()
maven { url 'https://maven.aliyun.com/repository/public' }
mavenCentral()
}
// 集中式管理依赖版本号,并没有真实依赖
// 等同于Maven中的dependencyManagement
dependencyManagement {
dependencies {
// mybatis-plus启动器
dependency "com.baomidou:mybatis-plus-boot-starter:${mybatisPlusVersion}"
dependency "com.baomidou:dynamic-datasource-spring-boot-starter:${dynamicDatasource}"
//druid连接池
dependency "com.alibaba:druid:${druidVersion}"
// json处理
dependency "com.alibaba:fastjson:${fastjsonVersion}"
dependency "org.apache.commons:commons-math3:${commonsMath3Version}"
dependency "com.qiniu:qiniu-java-sdk:${qnVersion}"
}
imports {
mavenBom "org.springframework.boot:spring-boot-starter-parent:${springBootVersion}"
mavenBom 'org.keycloak.bom:keycloak-adapter-bom:9.0.3'
}
}
// 真实依赖.
dependencies {
annotationProcessor group: 'org.projectlombok', name: 'lombok'
// 类中的 setter/getter,使用注解c
compileOnly group: 'org.projectlombok', name: 'lombok'
}
test {
useJUnitPlatform()
}
}
3.新建两个子模块 B(模块)依赖A(模块)
4.更改A模块 gradle.build
// A模块 只作为一个依赖使用 本身并没有什么spring启动 则配置如下即可
dependencies {
// 不需要版本号 在父模块已集中管理了dependencyManagement
compile 'com.alibaba:druid'
}
5.更改B模块gradle.build
// B模块 作为一个spring 程序的入口 并依赖A模块
// spring 插件 子模块不需要启动时 不需要此行
apply plugin: 'org.springframework.boot'
dependencies {
//B模块依赖A模块配置 A模块中的依赖自动依赖到B
compile project(':A')
// B模块特有的依赖
compile 'org.apache.commons:commons-math3'
}
这样就大功告成了.
常见问题:
一.模块找不到XXX 错误
解决方案:
1.检查父模块setting.gradle
// 工程名 rootProject.name = 'build-modules-demo' // 包含的子模块 include 'A' include 'B'
2.检查子模块依赖另一个子模块 compile project(':A') 书写是否正确 冒号不能省略
dependencies { //B模块依赖A模块配置 A模块中的依赖自动依赖到B compile project(':A') // B模块特有的依赖 compile 'org.apache.commons:commons-math3' }
本篇博文采用《CC 协议》,转载必须注明作者和本文链接