Maven
- 1、分模块设计
- 2、Maven继承
- 2.1 继承关系
- 2.2 版本锁定
- 3、Maven聚合
- 4、聚合与继承的关系
1、分模块设计
如果一个项目中含有大量的功能模块。可以考虑将这些功能分模块设计,逐一进行开发。例如将公共类可以定义在一个项目中,将通用工具类也放在一个项目中,其他业务模块需要使用这些类或者工具,只需要在pom文件中引入它们的依赖坐标。
<dependencies><dependency><groupId>组织ID</groupId><artifactId>项目</artifactId><version>版本</version></dependency>...<dependency><groupId>组织ID</groupId><artifactId>项目</artifactId><version>版本</version></dependency>
</dependencies>
2、Maven继承
2.1 继承关系
在一个大型项目中,子模块非常多,如果这些子模块都需要一个共同的依赖,那么可以给这些子模块的父工程的pom文件中加入这项依赖,子模块中就不需要再加这个依赖了。这是因为子模块继承了父工程的pom文件中的依赖。
Maven继承的作用就是简化依赖配置,统一管理依赖;
指定继承关系,需要在子工程的pom文件中加入
<parent><!-- 父工程坐标 2.3.3--><groupId>组织ID</groupId><artifactId>项目</artifactId><version>版本</version><relativePath>父工程pom文件相对路径</relativePath>
</parent>
父工程需要指定打包方式为pom。在父工程pom文件中加:
<packaging>pom</packaging>
注意,如果父工程与子工程都引入了同一个依赖的不同版本,以子工程的为准。
2.2 版本锁定
在Maven中,可以在父工程的pom文件中通过dependencyManagement标签来统一管理依赖版本。
例如在一个大型项目中,有部分子模块引入了同一个依赖,当要改变依赖版本时,则需要在所有子模块中查找是否引入了这个依赖,这个过程相当繁琐。这时就可以通过Maven的版本锁定来解决这个问题。
子模块引入依赖时不指定版本,只需指定groupId和artifactId。把版本交给父工程管理。
在父工程中使用dependencyManagement标签管理版本:
<dependencyManagement><dependencies><dependency><groupId>组织ID</groupId><artifactId>项目</artifactId><version>指定版本</version> </dependency>...</dependencies>
</dependencyManagement>
dependencyManagement标签只会管理依赖版本,不会直接把依赖加入进来。
自定义属性与属性引用
自定义属性与属性引用方便集中统一管理依赖版本。
通过properties标签自定义属性:
<!-- 自定义属性 -->
<properties><jjwt.version>0.9.1</jjwt.version><lombok.version>1.18.24</lombok.version>
</properties>
通过${…}引用属性:
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>${jwtt.version}</version>
</dependency>
3、Maven聚合
在分模块开发时,如果需要打包一个项目,那么这个项目依赖的其他子项目需要先安装在Maven本地,父工程也需要安装在本地,再对此项目进行打包操作。这个操作比较复杂。所以Maven聚合实现一键构建,一键打包,一键运行。
聚合,也就是将多个模块组织成一个整体,同时进行项目构建。
聚合工程:一个不具有业务功能的“空”工程(有且仅有一个pom文件)。一般父工程会同时起到聚合工程的作用。
聚合工程的作用就是快速构建项目,无需根据依赖关系手动构建,直接在聚合工程上构建即可。
Maven中通过modules标签设置当前聚合工程所包含的子模块名称。
<!--- 聚合 --->
<modules><module> 子模块相对路径 </module><module>../prj_utils</module><module>../prj_common</module>...
</modules>
4、聚合与继承的关系
- 作用:
- 聚合用于快速构建项目
- 继承用于简化依赖配置,统一管理依赖
- 相同点 :
- 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中。
- 聚合与继承均属于设计型模块,并无实际的模块内容
- 不同点:
- 聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些
- 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己