目录
环境介绍
1、开发环境:IDEA + Java JDK 1.8 + Spring boot 2.5.6.RELEASE
2、多模块项目目录结构:请求控制层(controller),业务逻辑层(server),数据持久层(dao)。
3、项目演示源码:basic: IDEA + Spring Boot 多模块项目搭建演示
创建父工程
1、创建父工程:File -> New -> Project...,选择 Spring Initializr -> Next -> 填写项目信息 -> Next -> 依赖先不用选择 -> Next -> Finish。
2、删除父项目中无用的 .mvn 目录、src 目录、mvnw 及 mvnw.cmd 文件。
3、修改父项目 pom.xml 文件,多模块项目架构时,父项目打包类型 packaging 必须指定为 pom。
在线演示源码:pom.xml · 汪少棠/basic - Gitee.com
创建子模块
一:创建子模块
1、选择父项目右键 -> New -> Module,创建三个子工程 模块:basic-controller、basic-server、basic-dao,分别表示控制层/web层、业务层、持久化层。
2、子工程全部使用 Spring Initializr 的方式进行创建,下面以 basic-dao 为例进行演示,其余的也是同理。创建的同时可以指定依赖 比如 dao 模块可以指定数据库依赖,web 模块可以指定 web 依赖,也可以创建后再添加依赖。
3、修改子模块中的父工程,删除默认的 spring-boot-starter-parent,改为自己的父项目,子模块中删除默认的 relativePath 标签,此时默认是 ../pom.xml,会从本地路径中获取 parent 的 pom。
<parent>
<groupId>com.wmx</groupId>
<artifactId>basic</artifactId>
<version>1.0.0-SNAPSHOT</version>
<!--子模块中删除默认的 relativePath 标签-->
</parent>
4、修改父项目 pom.xml 文件,添加 modules 指定子模块:
<!--多模块架构时,父项目必须是 pom 类型-->
<packaging>pom</packaging>
<!--指定子模块-->
<modules>
<module>basic-dao</module>
<module>basic-server</module>
<module>basic-web</module>
</modules>
二:修改配置与依赖
1、删除 web 模块以外的启动类和 application.properties 配置文件,整个项目只需要一个启动类和一个配置文件。
2、删除子模块中默认的 spring-boot-starter、spring-boot-starter-test 依赖,因为它们在父项目中已经存在了。
3、添加子模块的依赖,basic-controller 依赖 basic-server,basic-server 依赖 basic-dao。
4、多模块项目中并不是每一个子模块都需要打成可执行的 Jar 包,通常只是 web 模块才需要,所以需要将 web 模块外的启动类删了,同时修改 web 模块外的项目(包括父项目),删除其中的打包插件 spring-boot-maven-plugin。
<build>
<plugins>
<!--打包插件,除了需要打包成可执行 jar/war 的模块,其它模块包括父项目全部删除此插件.-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
项目打包
1、从浏览器访问 web 层接口,web 层调用 server 层,server 调用 dao 层进行测试。
2、最后开发好的项目需要打包成可执行的 jar 才能部署到生产环境,需要的就是其中的 web 模块项目。
3、子模块的构建顺序受两个因素影响:
1、父模块中各子模块的声明次序,优先级由上到下
2、子模块间的依赖关系,被依赖的先执行
4、可以直接在父项目里执行 maven 命令,此时所有子模块会执行相同的命令,一次构建全部模块,当然每个子模块逐个执行也是可以的。
5、打包时使用 mvn clean package -Dmaven.test.skip=true 忽略测试类进行打包,测试代码不会影响项目发布,但是会影响项目的打包。
6、mvn clean package -Dmaven.test.skip=true 命令行打包演示:basic-web/src/main/resources/static/maven 命令打包.txt · 汪少棠/basic - Gitee.com