springmvc项目,一般会把项目分成多个包:controler、service、dao、utl等,但是随着项目的复杂性提高,想复用其他一个模块的话,因为是包的形式,剥离出来会比较困难,耦合性有点强,常用的方法就是复制代码修改,但是这样会做很多无用功与增加出错几率。
springboot多模块简单来说,就是把按包分模块的模式,借助maven升级到jar的方式,抽象性更加强了,假如iar再升级到到war或者多个集合jar,就成微服务了,在多模块jar模式下可以将某个jar拿出来对外共用,能大大提高代码复用率与开发效率。同时也能方便项目中所依赖的第三方Jar包的版本的统一管理。
本文将采用Java语言,基于JDK17基础环境、Maven、Idea等工具进行开发实现。JDK环境的安装请参考JDK安装部署。具体如下:
环境名称 | 版本号 |
---|---|
JDK | 17.0.7 |
Maven | 3.6.3 |
Idea | 2019.3.5 |
Spring Boot | 3.2.4 |
本文通过构建一个包含5个子模块的项目,来演示 SpringBoot 在 Maven 环境的多模块构建过程。具体如下图所示:
通过Spring Lnitalizer创建父工程,并设置响应的参数即可,具体操作步骤如下。
(1)File ->New Project ,在参数页面设置JDK版本,然后点击下一步即可,具体如下:
(2)在项目元数据参数页面根据实际需要设置对应的参数即可,具体如下:
(3)在项目依赖参数页面根据实际需要设置对应的参数即可,具体如下:
(4)在项目位置参数页面根据实际需要设置对应的参数即可,具体如下:
(5)创建好后删除刚创建工程里不需要的文件, 只保留:.idea 文件夹 、项目 pom 文件、以及一个 *.iml 文件,删除前的项目结构如下:
删除后的项目结构如下:
(1)右键点击父工程,选择 New -> Module… 创建子模块。这里依次创建 common、api、dao、service 和 web 共 5 个模块。
注意:除了 web 子模块创建时选择添加 Spring Web 依赖(当然也可以创建时不添加,等后面再手动编辑 pom.xml 文件添加),其他模块暂时不添加依赖。
在新建模块参数页面根据实际情况设置参数即可,具体如下:
(2)重复上述步骤新建common、api、service 等其他模块。
(3)将所有子模块的 mvnw、mvnw.cmd 文件及 .mvn 文件夹全部删除,具体如下:
(4)参照新建父工程的方式新建web模块。
(5)对于 src 里的内容,只保留 web 的启动类和配置文件,其他子模块的的启动类和配置文件都删除。
将父工程 pom.xml 文件修改成如下内容,里面声明该父工程包含的子模块,同时抽取统一的配置信息和依赖版本控制,这样可以方便子 pom 直接引用,简化子 pom 的配置。
1、多模块项目中,父模块打包类型必须是 pom。
2、因为开发框架是 spring boot,父模块默认继承 spring-boot-starter-parent,因此可以删除 spring-boot-starter 和 spring-boot-starter-test 依赖(祖先已经包含了)
父工程pom.xml如下:
4.0.0 pom common api dao service web org.springframework.boot spring-boot-starter-parent3.2.4 cn.cerc.smart design0.0.1-SNAPSHOT design SpringBoot多模块应用 17 org.springframework.boot spring-boot-starter-weborg.projectlombok lomboktrue org.springframework.boot spring-boot-starter-testtest org.springframework.boot spring-boot-maven-pluginorg.projectlombok lombok