Maven中的继承与聚合

一,继承

  • 前面我们将项目拆分成各个小模块,但是每个小模块中有很多相同的依赖
  • 于是我们创建一个父工程将模块中相同的依赖定义在父工程中,然后子工程继承父工程
  • Maven作用:简化依赖配置,统一依赖管理,可以实现多重继承像Java一样
  • 实现:<parent></parent>

1,继承的实现

一>父工程

创建父工程,设置打包方式为pom(<packaging>)

设置坐标信息

让父工程继承

复制代码
<!--    父工程-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.5</version>
    <relativePath/> <!-- lookup parent from repository ///从本地仓库查找父工程-->
</parent>

设置打包方式

XML 复制代码
<!---->
    <groupId>com.itheima</groupId>
    <artifactId>tlias-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
<!--    设置打包方式-->
    <packaging>pom</packaging>

父工程删掉src----因为我们只需要设置依赖不需要编写任何代码

三> 子工程

在子工程中的pom文件中继承父工程,父工程的坐标

然后再子工程pom文件中--<relativePath>是父工程的相对路径

四>再父工程pom文件中引入子工程中共有的依赖,如果父子工程都引入了相同的依赖以子工程的为准

2,继承版本的锁定

一,在maven中,可以在父工程的pom文件中通过 <dependencyManagement> 来统一管理依赖版本。

XML 复制代码
<!--统一管理依赖版本-->
<dependencyManagement>
    <dependencies>
        <!--JWT令牌-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>
    </dependencies>
</dependencyManagement>

二,然后在子工程中的<dependencies>引入依赖就可以,但是无序设置版本号

子工程依赖的版本是由父工程中**<dependencyManagement>** 来管理的,如果想要修改只需要在父工程中<dependencyManagement>修改就可以

XML 复制代码
<dependencies>
    <!--JWT令牌-->
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
    </dependency>
</dependencies>

三,在父工程中集中管理

1,自定义属性将依赖的版本统一放入properties标签中进行统一管理

XML 复制代码
<properties>
	<lombok.version>1.18.24</lombok.version>
</properties>

2,在pom文件中**<version>${lombok.version}</version>引入版本号**

XML 复制代码
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>${lombok.version}</version>
</dependency>
  • <dependencies> 是直接依赖,在父工程配置了依赖,子工程会直接继承下来。

  • <dependencyManagement> 是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需依赖(无需指定版本)

二,聚合

  • **聚合:**将多个模块组织成一个整体,同时进行项目的构建。

  • **聚合工程:**一个不具有业务功能的"空"工程(有且仅有一个pom文件) 【PS:一般来说,继承关系中的父工程与聚合关系中的聚合工程是同一个】

  • **作用:**快速构建项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可)

1,实现聚合()

一,在 父工程中的pom文件中 写入子工程的相对路径

XML 复制代码
<!--聚合其他模块-->
<modules>
    <module>../tlias-pojo</module>
    <module>../tlias-utils</module>
    <module>../tlias-web-management</module>
</modules>

三,继承与聚合

  • 作用

    • 聚合用于快速构建项目

    • 继承用于简化依赖配置、统一管理依赖

  • 相同点:

    • 聚合与继承的pom.xml文件打包方式均为pom,通常将两种关系制作到同一个pom文件中

    • 聚合与继承均属于设计型模块,并无实际的模块内容

  • 不同点:

    • 聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些

    • 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

相关推荐
云烟成雨TD4 小时前
Spring AI Alibaba 1.x 系列【69】Token 用量统计
java·人工智能·spring
JAVA9654 小时前
JAVA面试-并发篇 03-使用synchronized doublecheck实现单例有什么坑
java·单例模式·面试
在繁华处5 小时前
Java从零到熟练(四):面向对象基础
java·开发语言
小江的记录本6 小时前
【JVM虚拟机】堆内存分代模型:年轻代(Eden+Survivor)、老年代、元空间Metaspace(附《思维导图》+《面试高频考点清单》)
java·前端·jvm·后端·python·spring·面试
在繁华处6 小时前
Java从零到熟练(三):流程控制
java·开发语言·python
唐青枫6 小时前
Java Optional 实战指南:优雅处理空值与链式转换
java
一起学开源6 小时前
一文读懂 ReAct 范式:让 AI Agent 真正学会“思考+行动“
java·javascript·react.js·ecmascript·react·alibaba·智能体开发
逍遥德8 小时前
MQTT教程详解-04.SpringBoot集成MQTT(告别手动控制)
java·spring boot·物联网·中间件·iot·iotdb
语戚8 小时前
力扣 3161. 块放置查询:线段树解法(Java 实现)
java·算法·leetcode·面试·线段树·力扣·
我命由我123458 小时前
Android 开发问题:MlKitException: An internal error occurred during initialization.
android·java·java-ee·android jetpack·android-studio·androidx·android runtime