Maven
管理多模块应用的实现是互联网项目中多使用分布式开发,那么每个独立的服
务都会使用独立的项目进行维护,那么这样就需要使用多模块应用管理,来实现项目的高度
统一。
1.创建 Project 为 Empty Project
点击“
Next
”下一步
2.设置项目名称和项目存放位置
Project name
:项目名称
Project location
:项目存放位置
选择“
Cencel
”取消
Maven 空项目创建成功,如下图
5.创建 Maven 父工程
选择 Maven 工程
设置 Module 的 GAV 坐标
GroupId
:公司域名的倒序
ArtifactId
:项目或模块名称
Version
:项目或模块版本号
模块内容存放位置
配置导入设置
Maven 项目被修改后,需要“手动更新”或“自动更新”,通常选择“Enable Auto-Import”
设置父工程的 pom 文件
父工程的 packaging 标签的文本内容必须设置为 pom。
删除 src 目录
6.创建子模块
创建 module 工程
创建 maven java 工程
设置 module 项目基础信息
Add as module to
:选择将创建的模块添加哪个模块
Parent
:选择模块的父工程
ArtifactId
:模块的项目名称
设置模块存放位置
项目视图
子模块项目的 pom 文件
parent
标签:指向父工程
relativePath
标签:相对路径
7.设置父工程编译级别
执行效果:
项目中会统一使用
JDK
版本和编译级别,所以项目的编译级别必须统一一致,那么将编
指定编译级别前:
在
File -> Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler
查看
在父工程的 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
再次查看
8.父工程添加依赖
执行后效果:
<dependencies> <dependency> <groupId>MysqL</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.43</version> </dependency> </dependencies>
9.父工程管理依赖版本号
以上写做法,子模块会无条件继承父工程的所有依赖,导致的问题是,本不需要的继承
的依赖也会被继承,这就大大增加了项目模块最终打包的大小,也可能未上线埋下了隐患。
也就是说,父工程管理的是所有项目模块的依赖,而不是某一个项目模块的依赖,所以
某一个项目模块不需要继承父工程中的所有依赖,这就需要子项目模块向父工程声明需要的
依赖即可(声明式依赖)。而此时,父工程实际只需要管理依赖的版本号即可。
父工程添加 dependencyManagement 标签管理依赖
父工程添加 dependencyManagement 前
赖,那么之前子模块无条件继承的依赖就全部消失。
父工程添加 properties 管理版本号
替
子模块声明式添加依赖
由于父工程管理依赖的版本号,那么子模块要想继承依赖,只能通过声明式来添加依赖,
实际上,子模块中的依赖是继承父工程依赖的版本号;如果子模块已定义依赖版本号,那么
以子模块定义的版本号为准。
<dependencies> <dependency> <groupId>MysqL</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies>