前言
Maven多模块项目通常由一个父模块和若干个子模块构成,每个模块都对应着一个pom.xml。它们之间通过继承和聚合(也称作多模块)相互关联。多模块适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理。
1、父模块创建
父模块创建跟平时创建springboot项目一样,File->New->Project后,选择Spring Initializr,然后一直next创建完项目即可。
2、字模块创建
1.png在创建好的learn工程名上,点击右键,选择New–>Module,进入New Module页面,其他参数可自己选择,然后一直next创建成功。
上图展示的是我已经创建好了common、manyDataSource、test三个模块。
2.png
创建好后目录入上图
我们把上图中的无用的文件及文件夹删掉,包括父模块的mvnw、mvnw.cmd文件、mvn文件夹、src目录,因为此处的父模块只做依赖管理,不需要编写代码。
此时多模块项目已经创建完毕
3、多模块项目配置
父pom是为了抽取统一的配置信息和依赖版本控制,方便子pom直接引用,简化子pom的配置。
3.1、父模块的打包类型
多模块项目中,父模块打包类型必须是pom,同时以给出所有的子模块,其中每个module,都是另外一个maven项目。
我们的项目中目前一共有三个子模块,common、manyDataSource、test。后续新增的子模块也必须加到父pom的modules中。
3.2、继承设置
继承是maven中很强大的一种功能,继承可以使子pom获得parent中的各项配置,对子pom进行统一的配置和依赖管理。父pom中的大多数元素都能被子pom继承,想深入了解的同学可自行搜索学习
3.3、使用dependencyManagement管理依赖版本号
一般在项目最顶层的父pom中使用该元素,让所有子模块引用一个依赖而不用显式的列出版本号。maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。
3.4、使用properties控制依赖包的版本号,便于版本维护
在properties标签中,添加各依赖包的版本号,然后在dependency中直接引用该依赖版本号的值即可。
4、多模块项目打包遇到的问题
4.1、repackage failed: Unable to find main class
在Terminal中执行
mvn clean package
报
这是因为父模块中没有了主程序入口,
4.png
将父pom中的plugin中的内容注释掉即可解决
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
4.2、子模块中如果加入了启动类,如下图
3.png此时需要在对应的子模块pom中添加
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
否则打完包用
java -jar xxx.jar
时会提示xxx.jar中没有主清单属性
网友评论