Maven
管理多模块应用的实现是互联网项目中多使用分布式开发,那么每个独立的服
务都会使用独立的项目进行维护,那么这样就需要使用多模块应用管理,来实现项目的高度
统一。
1.创建 Project 为 Empty Project
点击“
Next
”下一步
![](https://img-blog.csdnimg.cn/63e74e03b79c440e8ed4f30b84439408.png)
2.设置项目名称和项目存放位置
为新创建的项目设置项目名称和项目位置,然后点击“
Finish
”
![](https://img-blog.csdnimg.cn/f1f9ea80559b469790482c0955d79f09.png)
Project name
:项目名称
Project location
:项目存放位置
3.“文件夹不存在”提示框
提示内容如下:
项目目录“
E:\
项目
\32 Maven
模块项目”不存在。它将由
IntellijIDEA
创建。
点击“
OK”
![](https://img-blog.csdnimg.cn/9898464973b441ff8d87f8cc871d8696.png)
4.项目结构
选择“
Cencel
”取消
![](https://img-blog.csdnimg.cn/ba417b369b0d4de3b044cdd3db21b958.png)
Maven 空项目创建成功,如下图
5.创建 Maven 父工程
创建一个
Model
工程
![](https://img-blog.csdnimg.cn/047c5088472e41539e738f926fba1db4.png)
选择 Maven 工程
设置 Module 的 GAV 坐标
GroupId
:公司域名的倒序
ArtifactId
:项目或模块名称
Version
:项目或模块版本号
模块内容存放位置
![](https://img-blog.csdnimg.cn/f0476160f840423988e910f3bd671b23.png)
配置导入设置
Maven 项目被修改后,需要“手动更新”或“自动更新”,通常选择“Enable Auto-Import”
设置父工程的 pom 文件
父工程的 packaging 标签的文本内容必须设置为 pom。
删除 src 目录
6.创建子模块
创建 module 工程
创建 maven java 工程
设置 module 项目基础信息
Add as module to
:选择将创建的模块添加哪个模块
Parent
:选择模块的父工程
GroupId
:选择父工程后,默认继承父工程的
GroupId
值
ArtifactId
:模块的项目名称
Version
:选择父工程后,默认继承父工程的
Version
值
设置模块存放位置
![](https://img-blog.csdnimg.cn/6d0c797e2e1d44cd96a96deb976e95f9.png)
项目视图
子模块项目的 pom 文件
parent
标签:指向父工程
relativePath
标签:相对路径
7.设置父工程编译级别
执行效果:
项目中会统一使用
JDK
版本和编译级别,所以项目的编译级别必须统一一致,那么将编
译插件添加到父工程,子模块依然会无条件去继承父工程的插件。
指定编译级别前:
在
File -> Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler
查看
![](https://img-blog.csdnimg.cn/a788e2e02a3f44c89fd0d66440a23570.png)
在父工程的 build -> plugins 标签中添加编译插件
<build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <target>1.8</target> <source>1.8</source> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>
指定编译级别后:
在
File -> Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler
再次查看
![](https://img-blog.csdnimg.cn/a81e6e518c644203a8a5a63186481b8e.png)
8.父工程添加依赖
执行后效果:
在父工程
dependencies
标签中添加
MySQL
依赖,子模块会无条件继承父工程所有依赖。
添加
MySQL
依赖前
![](https://img-blog.csdnimg.cn/3c67d6388c5a4cd0ae795c2cc8dff8b8.png)
添加 MySQL 依赖(父工程 pom 文件):
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.43</version> </dependency> </dependencies>
添加 MySQL 依赖后
9.父工程管理依赖版本号
以上写做法,子模块会无条件继承父工程的所有依赖,导致的问题是,本不需要的继承
的依赖也会被继承,这就大大增加了项目模块最终打包的大小,也可能未上线埋下了隐患。
也就是说,父工程管理的是所有项目模块的依赖,而不是某一个项目模块的依赖,所以
某一个项目模块不需要继承父工程中的所有依赖,这就需要子项目模块向父工程声明需要的
依赖即可(声明式依赖)。而此时,父工程实际只需要管理依赖的版本号即可。
父工程添加
dependencyManagement
前
![](https://img-blog.csdnimg.cn/8243c0c666314895b12ebe161ddfd19f.png)
父工程添加 dependencyManagement 标签管理依赖
父工程添加 dependencyManagement 前
子模块项目之前继承的依赖消失,由于父工程通过
dependencyManagement
标签管理依
赖,那么之前子模块无条件继承的依赖就全部消失。
![](https://img-blog.csdnimg.cn/508bab8e148d4a36965894ced71e9f84.png)
父工程添加 properties 管理版本号
在
properties
标签中,可以自定义标签名称来管理依赖的版本号,通常自定义的标签名
称由“项目名称”
+version
英文单词构成。被管理的依赖版本号由“
${
算定标签名称
}
”来代
替
![](https://img-blog.csdnimg.cn/9937cb73df824887ad94219034b65acc.png)
子模块声明式添加依赖
由于父工程管理依赖的版本号,那么子模块要想继承依赖,只能通过声明式来添加依赖,
实际上,子模块中的依赖是继承父工程依赖的版本号;如果子模块已定义依赖版本号,那么
以子模块定义的版本号为准。
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies>
![](https://img-blog.csdnimg.cn/586e62542eba47e7912da656f7ccaee0.png)