1. 多模块项目
使用 SpringBoot 开发 Web 项目,如果项目整体不太复杂,无需使用微服务架构,为了开发的便利性可以采用 Maven 的多模块项目结构。
SpringBoot 的多模块项目就是基于 Maven 管理、对项目按照功能或者层级结构进行拆分,降低项目耦合性,抽取公共模块,实现一处开发多处引用,提高代码复用率和开发效率,更利于项目后期的维护和升级。
2. 项目结构初始化
2.1 创建父工程
创建多模块项目时首先要创建最上层父工程,并用来统一管理子模块,创建方法流程为:
使用 IDEA 编译器,选择文件 -> New -> 新建项目,选择 Spring Initializr,点击下一步,
设置合适的 Group 名称和 Artifact 名称(两者最终代表包路径),选择合适的 Java 版本并点击下一步,
选择合适的起步依赖,也可以不选择后续使用 maven 坐标手动添加,点击下一步,
为项目设置合适的名称,并选择项目在本地生成的根目录,点击完成
初始化生成 SpringBoot 项目
得到父工程项目后,由于父工程只用来统一管理多模块,并不会进行代码编写,因此会将父工程目录结构中无用的文件和文件夹删除
删除 .mvn 和 src 文件夹
删除 mvnw 和 mvnw.cmd 文件
留下 pom.xml 作为父级依赖设置,进行统一依赖管理
2.2 创建子模块
父工程创建成功后,可以在此基础上新建子模块,在父项目上点击鼠标右键,选择新建 -> 模块 -> 新建模块,选择 Spring Initializr,之后便和创建 SpringBoot 项目一致,定义组织名称、选择起步依赖、定义项目名称,最后完成创建得到一个子模块项目。
在创建子模块项目时有几点需要注意:
子模块创建时 Group 、 Artifact 和 Name 不要与父工程重复,否则关联时会出现冲突
子模块的模块名会在目录结构中展示,并使用模块名进行父子关联
自定义子模块名称时,对应的的内容根目录和模块文件位置要跟随变化,如果设置成了父工程目录,则会覆盖父工程文件导致结构错误!
完成子模块的创建后,在项目中就会出现如下的目录结构
2.3 关联父子模块
到目前为止,整个项目结构上满足了父工程、子模块,要想真正实现父子模块关联还需要进一步设置。
父工程配置
父工程的 pom.xml 中,设置
pom,代表打包类型为 pom
父工程的 pom.xml 中,使用
标签定义子模块进行关联<modules> <module>child_module_name</module> </modules>
注意:父工程的 pom.xml 中的
标签中引用了的 springboot ,这是 SpringBoot 项目默认需要引用的顶级工程,不可以删除,如果删除会导致项目运行失败!子模块配置
子模块的 pom.xml 中,
标签内容修改为父工程的 groupId、artifacId 等信息子模块的 pom.xml 中,使用
jar设置打包为 jar 格式(可不加,在创建模块时会有选择默认打包类型)
3. 项目依赖的统一管理
3.1 默认引入依赖
起步依赖
在创建项目模块时,如果不选择任何初始依赖,那么 SpringBoot 项目只会默认加入 spring-boot-starter 和 spring-boot-starter-test 两个依赖信息
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency></dependencies>
引入依赖
对于 Web 项目,还需要增加 web 依赖信息,可以在父工程的 pom.xml 文件中的 标签中添加如下依赖信息
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>
添加完成后,则所有子模块都会继承该依赖信息自动生效,无需额外引入。
3.2 统一管理依赖
既然是父-子工程的结构,可以将项目中用到的依赖统一在父工程项目中进行管理,统一依赖和版本号信息。
om.xml 文件中,可以使用
标签自定义相关依赖的版本号<properties> <java.version>1.8</java.version> <lombok.version>1.18.0</lombok.version> <mysql.version>8.0.23</mysql.version></properties>
2 然后可以使用 标签统一声明用到的依赖信息,其中的版本号使用 标签定义变量
<dependencyManagement> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <type>pom</type> <version>${mysql.version}</version> </dependency> </dependencies></dependencyManagement>
每个子模块需要使用依赖是只需要在
标签中加入依赖 groupId 和 artifactId 信息即可,版本号会自动使用父工程声明的版本<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency></dependencies>
配置完成之后,如果有升级依赖 jar 版本的需求,则只需要在父工程中更新对应依赖的版本信息即可。
4. 项目运行
多模块的 SpringBoot 项目构建完成并配置完成后,且引入了 web 项目必须的依赖,就可以验证项目是否可以正常运行。
验证运行:由于父工程没有代码启动类,因此只需要进入到子模块中,找到对应的启动类运行,如果运行成功,说明子模块运行依赖等配置成功;
验证打包:打包流程使用 maven 工具管理,只需要在 IDEA 右侧打开 maven 工具栏,在父工程下的 Lifecycle 声明周期中,执行 clean、package、install 等阶段,控制台输出执行成功日志说明打包完成。
如果需要新增子模块,则按照相同的方式初始化模块,关联父工程,并在父工程中增加 标签对应即可。
原文:https://juejin.cn/post/7102790032767287303