Maven 多模块项目通常由一个父模块和若干个子模块构成,每个模块都对应着一个
pom.xml。它们之间通过继承和聚合(也称作多模块)相互关联。多模块适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理。
本文通过构建一个包含
4 个子模块的项目,来演示
SpringBoot 在
Maven 环境的多模块构建过程。
(1)首先,先创建一个
Spring Initializr 工程
hangge 作为 父工程(不添加任何依赖):
(2)删除刚创建工程里不需要的文件, 只保留:
.idea 文件夹 、项目
pom 文件、以及一个
*.iml 文件。
注意: 因为父模块只做依赖管理,不需要编写代码,所以
src 文件夹可以直接删除。
(3)删除后结果如下:
(1)右键点击父工程,选择
New ->
Module... 创建子模块。这里依次创建
hangge-base、
hangge-dao、
hangge-service 和
hangge-web 共
4 个模块。
注意:除了
hangge-web 子模块创建时选择添加
Spring Web 依赖(当然也可以创建时不添加,等后面再手动编辑
pom.xml 文件添加),其他模块暂时不添加依赖。
(2)将
4 个子模块的
mvnw、
mvnw.cmd 文件及
.mvn 文件夹全部删除。
(3)对于
src 里的内容,只保留
hangge-web 的启动类和配置文件,其他子模块的的启动类和配置文件都删除:
(4)删除后结果如下:
将父工程
pom.xml 文件修改成如下内容,里面声明该父工程包含的子模块,同时抽取统一的配置信息和依赖版本控制,这样可以方便子
pom 直接引用,简化子
pom 的配置。
- 多模块项目中,父模块打包类型必须是 pom。
- 因为开发框架是 spring boot,父模块默认继承 spring-boot-starter-parent,因此可以删除 spring-boot-starter 和 spring-boot-starter-test 依赖(祖先已经包含了)
(1)子模块
hangge-base的
pom.xml文件内容如下,其中
parent要使用顶层的父模块,同时由于我们项目用到了
Lombok,所以还添加了
lombok依赖:
注意:由于子模块的配置信息会继承父模块的,所以子模块原来的
properties 可删掉。
(2)子模块
hangge-dao的
pom.xml文件内容如下,同样
parent要使用顶层的父模块,并添加
hangge-base子模块,以及数据库相关依赖:
(3)子模块
hangge-service的
pom.xml文件内容如下,同样
parent要使用顶层的父模块,并添加
hangge-dao子模块依赖:
(4)子模块
hangge-we b的
pom.xml文件内容如下,同样
parent要使用顶层的父模块,并添加
hangge-service子模块依赖:
注意: 之前创建这个子模块的时候已经添加了
spring-boot-starter-web 依赖,如果没有则手动添加。
(1)目前项目启动类
HanggeWebApplication 在
com.example.hanggeweb 包下面,我们需要将其移动移动到
com.example 包下。
(2)移动的方式就是右键点击
HanggeWebApplication 选择
Refactor ->
Move...
如果不移动启动类的话,在多模块项目中会可能会碰到一个模块无法通过
@Autowired 注入其他模块里的对象的问题。启动时会报类似如下的错误:
- Field bookService in com.example.hanggeweb.controller.HelloController required a bean of type 'com.example.hanggeservice.BookService' that could not be found.
(3)在弹出框中将
To package 设置成
com.example 后点击
Refactor 按钮移动:
(1)首先在
hangge-dao 模块中添加一个
Book 实体类:
(2)接着在 hangge-dao 模块中添加 BookDao 接口,继承 JpaRepository:
(3)接着在 hangge-service 模块中添加一个业务实现类 BookService,注入 BookDao 并调用:
(4)然后在 hangge-web 模块中创建一个 Controller,注入 BookService 并调用:
(5)最后在 hangge-web 模块的 application.properties 中配置数据库基本信息以及 JPA 相关配置:
(2)接着在 hangge-dao 模块中添加 BookDao 接口,继承 JpaRepository:
(3)接着在 hangge-service 模块中添加一个业务实现类 BookService,注入 BookDao 并调用:
(4)然后在 hangge-web 模块中创建一个 Controller,注入 BookService 并调用:
(5)最后在 hangge-web 模块的 application.properties 中配置数据库基本信息以及 JPA 相关配置:
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/hangge2?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=hangge1234
#是否在控制台打印JPA执行过程生成的SQL
spring.jpa.show-sql=true
#表示JPA对应的数据库是MySQL
spring.jpa.database=mysql
#表示在项目启动时根据实体类更新数据库中的表
spring.jpa.hibernate.ddl-auto=update
#表示使用的数据库方言是MySQL57Dialect
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
(1)运行
hangge-web 模块下的
Application 的启动类:
(2)使用浏览器访问
http://localhost:8080/test 便可查询到相关的数据信息:
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/10811.html