目录
1.前言
2. 软硬件环境
3.项目搭建
3.1.创建 SpringBoot 父项目
3.2. 构建子项目centerdao
3.3. 构建子项目centerweb
4. 建立父子 Module 依赖
4.1 删除不必要文件
4.2.修改 Parent 项目 packaging
4.3.修改子项目pom.xml 信息
4.4.补充说明
5. 项目继承关系
6. 验证项目
7.异常处理
8.结语
鸣谢
为了更好地组织和管理项目代码。通过将一个大型项目分解成多个模块,每个模块都可以独立地编译、测试和部署,从而提高项目的可维护性和可扩展性。多模块项目,适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理。尤其是一些开源框架,也是采用多模块的方式,提供插件集成,用户可以根据需要配置指定的模块。
构建微服务项目,基本上会对模块进行明确的划分,比如:
上面的拆分也并非绝对,随着架构师对于项目结构的不同理解,可能会衍生出不同的模块
本篇文章会详细演示如何创建 SpringBoot 父子模块的项目,针对部分知识点着重讲解
电脑: win10
创建项目工具: IDEA 2022.3
JDK 版本:JDK8
Maven版本: 3.6.1
1)首先打开 IDEA 工具,创建spring项目 ,点击File ---->new ---> Create New Project
2)选择 Spring Initializr(初始化),选择Project SDK 1.8,类型选择maven,Java语言选择8
Group: 项目组织唯一的标识符,实际对应 Java 的包的结构,是 main 目录里 Java 的目录结构Group 也就是 groupId,分为多个段;一般情况下 第一段为域,第二段为公司,第三段为项目名称。以 Nacos 源码进行举例,Group 为 com.alibaba.nacos:com 为商业组织,alibaba 为公司名称,nacos 就是项目名称
Artifact: 项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称,Artifact 即为 artifactId。
Type: 分为四种不同的类型,日常我们选择默认第一条就行,也就是 Maven Project
Language: 开发语言的话自然就是默认的 Java
Packaging: 打包方式,分为 War 包 和 Jar 包,这里选择 Jar 包
Java Version: 选择 Java 的一个版本,再坚持 20 年的 JDK 1.8
Version: 当前项目的一个版本,SNAPSHOT 为快照的意思
开发时一般使用此类型,因为对于 Maven 仓库的同步较为友好,有不同纬度的同步选择
Name: 定义项目名称
Description: 定义项目描述信息,帮助别人更好的了解项目
Package: 定义 main.java 目录下的结构
3)选择 SpringBoot 版本信息以及 Pom.xml 文件依赖组件
这里选择的 SpringBoot 版本是 2.7.1,jdk8对应2.*版本,点击 Next 继续进行创建项目
4)一个标准的 SpringBoot 项目就产生了
在父项目的基础上直接创建module
1)点击菜单栏中 File -> New -> Module,不同版本中可能会有一点差异
2)这里就是重复上述在创建 SpringBoot 项目时的步骤,Next 下一步
3)配置可按照需求进行选择,因为不同的 Module 需要引用不同的 Pom 依赖,后面会与 Parent 保持一个交互,确认创建信息,点击 Finish 生成项目
4)最终结构目录如下,项目已成功创建,后续我们要修改其中的 Pom.xml 使其成为真正的父子项目
1)创建步骤与上边的centerdao一致
2)添加spring web依赖,web项目作为整个项目的启动项目,继续添加代码简化依赖lombok
3)最终项目结构如下
将建立的 Parent 项目与后面创建的 Module 产生关联,需要改动以下几点
- 修改 Parent 项目 Pom.xml 的打包方式 packaging 标签打包方式为 pom
- 删除不必要文件并梳理 Pom.xml 依赖上下级关系
- 需要新加一个 modules 标签,包含所有子项目,将所有的子模块都引入进去
对于子工程中的 .xml 文件
- 修改子项目Module 项目 pom.xml中parent 标签为其父工程
- 添加打包方式为 jar
- 删除依赖包:继承父工程的依赖包
1)删除父项目红框标注的内容:src 文件是保存源代码的,可是我们的多模块的代码存放在多个架构层中,所以不需要这个 src 来存放代码
2)删除除启动项目centerweb之外的启动文件和配置文件和启动类
删除后的项目结构是这样的:
打开 Parent 项目的根 Pom.xml 文件,新增下方代码
pom
centerdao
centerweb
packaging 包含三个值 Jar、War、Pom,默认 Jar的方式
首先来解释下 packaging 为 Pom 的意思,宏观而言即没有代码需要测试或者编译,也没有资源需要处理
Jar: 内部调用或作为服务进行发布使用
War: 需要部署的项目
Pom: 寓意为一个父级项目,一般作为项目聚合和依赖传递使用
modules 代表了 Parent 项目下的子 Module,体现了聚合的思想
这里把 父项目Parent 项目的 Pom.xml 配置复制出来,帮助大家后续排查问题
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.7.11
com.ykx.center
centerparent
0.0.1-SNAPSHOT
centerparent
SpringBoot 父子模块项目
1.8
pom
centerdao
centerweb
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
spring-boot-maven-plugin 的作用是运行 mvn package 时会将项目打包为可运行的 jar 包,java -jar 运行即可
如果不加这个 plugins,java -jar xxx.jar 会报出如下错误
xxx/target/bootdemo-remote-api-0.0.1-SNAPSHOT.jar中没有主清单属性
创建后的子项目的 Parent 信息是 SpringBoot 配置,修改后如下
com.ykx.center
centerparent
0.0.1-SNAPSHOT
另外说一下 dependencies 和 dependencyManagement 标签做一个讲解
1)dependencies
如果 Parent 项目中使用 dependencies 标签,标签内的依赖默认传递子 Module,不用子 Module 进行显示书写依赖
2)dependencyManagement
dependencyManagement 与dependencies 不同的是,标签内的依赖不会默认传递子 Module,其作用只是为了统一版本声明
如果子 Module 依赖 Parent 项目中 dependencyManagement 标签内的 pom 依赖,需要显示在子 Module 的 pom 文件中进行书写
我们按照《构建子 Module》章节的内容,构建出如下所述的子 Module,如果centerweb项目引用centerdao项目
com.ykx
centerdao
0.0.1-SNAPSHOT
然后修改centenweb子 Module 的 pom.xml 文件如下
4.0.0
com.ykx.center
centerparent
0.0.1-SNAPSHOT
com.centerweb
centerweb
0.0.1-SNAPSHOT
centerweb
centerweb子项目
1.8
0.0.1-SNAPSHOT
com.ykx
centerdao
${centerdao.version}
org.springframework.boot
spring-boot-starter-web
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot
org.springframework.boot
spring-boot-maven-plugin
org.projectlombok
lombok
通过继承关系的设置,centerdao 中的代码就可以被 centerweb 项目进行引用
在 Parent 项目 pom.xml中 dependencies 标签中定义了 spring-boot-starter-web 依赖,直接使用 web 相关内容即可,直接可以运行
在centerweb中创建 Controller 控制器
@RestController
public class DemoController {
@RequestMapping("/ok")
public String test() {
return "OK";
}
}
启动项目
启动后端项目成功后,使用restfultool请求接口
如果遇到项目搭建后,模块项目无启动类的情况,参考:
https://www.somode.com/softjc/43094.html
由于作者水平有限, 希望大家能够反馈指正文章中错误不正确的地方, 感谢
小伙伴的喜欢就是对我最大的支持 , 希望大家能够 点赞、评论、在看三连
[1].https://blog.csdn.net/qq_37781649/article/details/109321248