Maven高级知识
Maven高级知识
分模块设计与开发
- 什么是分模块设计:将项目按照功能/结构拆分成若干个子模块
- 为什么要分模块设计:方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享
- 注意事项:分模块设计需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分
- 实际中开发中都是先分模块设计,然后再开发的。
继承与聚合
-
继承
- 概念: 继承描述的是两个工程间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承。
- 作用: 简化依赖配置、统一管理依赖
- 实现:
<parent><groupId>...</groupId><artifactId>...</artifactId><version>...</version><relativePath>....</relativePath> </parent>
- 实现:
-
版本锁定
- 在maven中,可以在父工程的pom文件中通过
<dependencyManagement>
来统一管理依赖版本- 栗子:
<!--父工程--> <!--统一管理依赖版本--> <dependencyManagement><dependencies><!--JWT令牌--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency></dependencies> </dependencyManagement>
<!--子工程--> <dependencies> <!--JWT令牌--> <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId> </dependency> </dependencies>
- 栗子:
- 注意:
- 在父工程中所配置的
<dependencyManagement>
只能统一管理依赖版本,并不会将这个依赖直接引入进来。 这点和
<dependencies>
是不同的。 - 子工程要使用这个依赖,还是需要引入的,只是此时就无需指定
<version>
版本号了,父工程统一管理。变更依赖版本,只需在父工程中统一变更。
- 在父工程中所配置的
- 在maven中,可以在父工程的pom文件中通过
-
属性配置
- 可以通过自定义属性及属性引用的形式,在父工程中将依赖的版本号进行集中管理维护。 具体语法为:
-
自定义属性
<properties><lombok.version>1.18.30</lombok.version></properties>
-
引用属性
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version> </dependency>
-
- 可以通过自定义属性及属性引用的形式,在父工程中将依赖的版本号进行集中管理维护。 具体语法为:
-
聚合
- 概念: 将多个模块组织成一个整体,同时进行项目的构建。
- 聚合工程: 一个不具有业务功能的“空”工程(有且仅有一个pom文件) 【PS:一般来说,继承关系中的父工程与聚合关系中的聚合工程是同一个】
- 作用: 快速构建项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可)
- 实现: 在maven中,我们可以在聚合工程中通过
<moudules>
设置当前聚合工程所包含的子模块的名称,
添加如下配置,来指定当前聚合工程,需要聚合的模块:<!-- 聚合其他模块 --> <modules><module>../tlias-pojo</module><module>../tlias-utils</module><module>../tlias-web-management</module> </modules>
继承与聚合对比
-
作用
- 聚合用于快速构建项目
- 继承用于简化依赖配置、统一管理依赖
-
相同点:
- 聚合与继承的pom.xml文件打包方式均为pom,通常将两种关系制作到同一个pom文件中
- 聚合与继承均属于设计型模块,并无实际的模块内容
-
不同点:
- 聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些
- 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己