Maven高级
分模块设计:
简介:
- 将项目按照功能拆分成若干个子模块;
- 方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享;
注意事项:
- 分模块设计需要先针对模块功能进行设计,在进行编码。不会先将工程开发完毕,然后进行拆分;
继承:
简介:
- 概念:继承描述的是两个工程间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见与依赖关系的继承;
- 作用:简化依赖配置,统一管理依赖;
- 实现:<parent>...</parent>
- 打包方式:pom,不指定默认为jar;
继承关系实现:
1.创建maven模块tlias-parent,该工程为父工程,设置打包方式pom;因为该工程的子工程为springboot项目,所以需要继承spring-boot-starter-parent这个父工程;
<!--继承的父工程,因为子工程有springboot项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--该工程的坐标和打包方式-->
<groupId>com.caihongjia</groupId>
<artifactId>tlias-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
2.在子工程的pom.xml文件中,配置继承关系;
<!--继承的tlias-parent工程-->
<parent>
<groupId>com.caihongjia</groupId>
<artifactId>tlias-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!--如果不写默认为../pom.xml-->
<relativePath>../tlias-parent/pom.xml</relativePath> <!-- lookup parent from repository -->
</parent>
<!--该子工程的坐标; 继承了父工程,groupId一致可以不用写;-->
<groupId>com.caihongjia</groupId>
<artifactId>tlias-pojo</artifactId>
<version>1.0-SNAPSHOT</version>
注意事项:
- 在子工程中,配置了继承关系之后,坐标中的groupId是可以省略的,因为会自动继承父工程;
- relativePath指定父工程的pom文件的相对位置(如果不指定,将从本地仓库/远程仓库查找该工程);
3.在父工程中配置各个工程共有的依赖(子工程会自动继承父工程的依赖):
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
注意事项:
- 若父子工程都配置了同一个依赖的不同版本,以子工程的为准;
版本锁定:
统一管理依赖版本:
-
在maven中,可以在父工程的pom文件中通过<dependencyManagement>来统一管理依赖版本;
-
<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>
自定义属性/引用属性:
-
在<properties>标签中,自定义版本属性,然后使用${属性名},来引入到<version>标签中;
-
自定义版本属性,就是自定义一个新的标签;
<!--自定义属性--> <properties> <!--该标签自命名--> <lombok.version>1.18.24</lombok.version> <jjwt.version>0.9.0</jjwt.version> </properties> <!--引用属性--> <dependencyManagement> <dependencies> <!--JWT令牌--> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>${jjwt.version}</version> </dependency> </dependencies> </dependencyManagement>
聚合:
简介:
- 聚合
- 将多个模块组织成一个整体,同时进行项目的构建;
- 聚合工程
- 一个不具有业务功能的“空”工程(有且仅有一个pom文件);
- 一般写在父工程中;
- 作用
- 快速构建项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可);
实现:
-
maven中可以通过<modules>设置当前聚合工程所包含的子模块名称;
<!--父工程(聚合工程)--> <!--聚合--> <modules> <!--写入子模块的相对路径--> <module>../tlias-pojo</module> <module>../tlias-utils</module> <module>../tlias-web-management</module> </modules>
继承与聚合关系:
- 作用:
- 聚合用于快速构建项目;
- 继承用于简化依赖配置、统一管理依赖;
- 相同点:
- 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中;
- 聚合与继承均属于设计型模块,并无实际的模块内容;只需pom.xml文件;
- 不同点:
- 聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些;
- 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己;