SpringBoot 多项目工程(基于Gradle)
SpringBoot 多项目工程(基于Gradle)
Gradle利用basic模板创建空父项目
1
2
3
4
mkdir spring-cloud-project
cd spring-cloud-project
# 初始化 gradle 根项目(选择 basic 类型)
gradle init --type basic --dsl groovy
初始化后根目录的结构
1
2
3
4
5
6
7
8
.
├── build.gradle # 空
├── gradle
│ ├── ...
├── gradle.properties
├── gradlew
├── gradlew.bat
└── settings.gradle # 只有项目名
其中核心为build.gradle和settings.gradle两个配置文件。
除了上述用命令行创建,也可通过IDEA先创建gradle为java-application的项目,然后手动删除src目录和修改build.gradle文件即可。
1
File -> New -> Project -> java -> build system(gradle)
然后删除根项目中的/src文件夹和清空build.gradle的内容。(最终效果与命令行创建basic模板的gradle是一致的)
创建SpringBoot子项目
IDEA在根项目中创建Module
1
File -> New -> Module -> Generators(Spring Boot)
依赖只添加Web用于测试
新创建的子项目service1的目录,并删除其中的部分文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
# service1 目录
.
├── build.gradle
├── gradle 删除
│ └── wrapper
├── gradlew 删除
├── gradlew.bat 删除
├── HELP.md
├── service1.iml
├── settings.gradle 删除(子模块不需要)
└── src
├── main
└── test
注:只保留根目录的 gradlew 和 gradle/,统一管理Gradle。
在根项目的settings.gradle中添加子项目,纳入管理。
1
2
3
4
// settings.gradle
rootProject.name = 'spring-cloud-project'
include ':service1'
注:若IDEA的gradle工具刷新后(建议关闭IDEA重新加载项目)同时出现了根项目(spring-cloud-project)和子项目(service1),或出现了多个根项目(spring-cloud-project),则只保留一个根项目(spring-cloud-project),将其他的项目都删掉(unlink gralde project)。
其他子项目也通过相同的方式创建。
配置 build.gralde 文件
1
2
3
4
5
6
7
8
my-springboot-multi-project/
├── build.gradle // 父项目构建脚本
├── settings.gradle // 声明包含哪些子项目
├── gradle.properties // (可选)定义公共属性
├── module-service1/ // 子项目1
│ └── build.gradle
└── module-service2/ // 子项目2
└── build.gradle
父项目 build.gradle
父项目的 build.gradle 主要用于(统一版本管理、统一仓库源、统一编译环境):
- 定义公共插件(如 Java、Spring Boot)
- 配置仓库(repositories)
- 统一依赖版本(通过
ext或dependencyManagement) - 应用通用配置到所有子项目(使用
subprojects)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
plugins {
id 'org.springframework.boot' version '4.0.6' apply false
}
ext {
set('springCloudVersion', '2025.1.0')
set('springCloudAlibabaVersion', '2025.1.0.0')
}
allprojects {
group = 'top.chc'
version = '1.0.0'
repositories {
// 私有 Nexus(按需开启)
// maven {
// name = '私有仓库'
// url = 'http://nexus.example.com/repository/maven-public/'
// credentials {
// username = project.findProperty('nexusUser') ?: ''
// password = project.findProperty('nexusPassword') ?: ''
// }
// allowInsecureProtocol = true // 仅 http 时需要
// }
mavenCentral()
}
}
subprojects {
plugins.withType(JavaPlugin) {
java {
toolchain {
languageVersion = JavaLanguageVersion.of(25)
}
}
tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8'
}
dependencies {
implementation platform(
org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
)
implementation enforcedPlatform(
"org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
)
implementation enforcedPlatform(
"com.alibaba.cloud:spring-cloud-alibaba-dependencies:${springCloudAlibabaVersion}"
)
}
}
plugins.withType(org.springframework.boot.gradle.plugin.SpringBootPlugin) {
bootJar {
enabled = true
}
jar {
enabled = false
}
}
}
plugins指定springboot的项目版本ext指定springcloud版本,springcloudalibaba版本allprojects指定项目名称版本,maven仓库地址subprojects如果是Java项目指定Java版本;项目编码;springboot,springcloud,springcloudalibaba的BOM版本控制。如果是Springboot项目开启bootJar(编译成bootJar)关闭jar(不再编译成Jar)。
子项目 build.gradle
子项目只需要写需要的组件,不需要填写具体的版本号。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
plugins {
id 'java'
id 'org.springframework.boot'
}
description = 'service1'
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-webmvc'
testImplementation 'org.springframework.boot:spring-boot-starter-webmvc-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
tasks.named('test') {
useJUnitPlatform()
}
This post is licensed under CC BY 4.0 by the author.



