11.Maven高级

发布时间 2023-11-24 17:59:02作者: 回家太晚太悲催

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文件;
  • 不同点:
    • 聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些;
    • 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己;