Java学习路线:Maven(三)继承关系

目录

实现继承

依赖管理


实现继承

在maven中,也存在继承关系,允许一个项目继承另一个项目的配置信息

那么,如何实现项目的继承呢?

在idea中,右键父项目文件夹,点击新建模组,就可以新建一个该父项目下的子项目。

新建完成后,可以看到在父项目pom文件中,自动添加了以下代码:

XML 复制代码
<packaging>pom</packaging>
<modules>
  <module>child1</module>
</modules>

代码标识了该父项目下的子项目artifactId

在子项目的pom.xml文件中,通过<parent>标签指定父项目:

XML 复制代码
<project>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>parent-project</artifactId>
        <version>1.0.0</version>
    </parent>
    <artifactId>child-project</artifactId>
    
    <!-- 可以覆盖父 POM 的配置,或者添加新的配置 -->
    <dependencies>
        <!-- 子项目特有的依赖 -->
    </dependencies>
</project>

parent标签中填写的父项目的坐标

子项目只有artifactId属性,因为子项目默认的groupId和父项目相同

另外,子项目还默认继承了所有父项目的依赖(包括被设置为optional的依赖)

依赖管理

既然子项目默认继承了所有父项目的依赖,那如果子项目不想继承某一些依赖,应该怎么办呢?

在父项目中,可以使用依赖管理的标签<dependencyManagement>来管理子项目中所有可能用到的依赖

XML 复制代码
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.34</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

当依赖被<dependencyManagement>标签修饰后,表示这个依赖被集中管理了,不同的子项目导入同一个依赖都会使用父项目中的这个版本

并且,这些依赖在子项目中将不会自动导入

如果子项目中想要使用某一个依赖,则在自己的dependencies中导入即可

XML 复制代码
<dependencies>
   <dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
   </dependency>
</dependencies>

不过,这个时候子项目无需再标明依赖的版本号,因为所有的子项目都将使用父项目中统一规定的版本号

注意:尽管使用了<dependencyManagement>,如果父项目中仍然存在没有被<dependencyManagement>修饰的依赖,这些依赖还是会直接继承

子项目项目引用

除了可以引用父项目,子项目之间也可以进行相互引用

假设我们有子项目child1和child2,在子项目child2中添加依赖:

XML 复制代码
<dependency>
     <groupId>org.example</groupId>
     <artifactId>child1</artifactId>
</dependency>

这样child2就可以直接使用定义在child1中的内容了

相关推荐
逸Y 仙X5 分钟前
文章十二:索引数据的写入和删除
java·大数据·spring boot·spring·elasticsearch·搜索引擎·全文检索
炽烈小老头9 分钟前
【每天学习一点算法 2026/03/26】合并区间
学习·算法
代码探秘者10 分钟前
【算法篇】5.链表
java·数据结构·人工智能·python·算法·spring·链表
1104.北光c°11 分钟前
Leetcode3.无重复字符的最长子串 HashSet+HashMap 【hot100算法个人笔记】【java写法】
java·开发语言·笔记·程序人生·算法·leetcode·滑动窗口
Binary-Jeff11 分钟前
Maven 依赖作用域详解:compile、provided、runtime、test
java·spring·spring cloud·servlet·java-ee·maven
QH_ShareHub13 分钟前
Rstudio 与 R 打开 Rdata (压缩文件) 差异
java·前端·r语言
鹭天13 分钟前
目标检测学习笔记
笔记·学习·目标检测
spencer_tseng14 分钟前
apache-maven-3.9.6
java·maven
yashuk19 分钟前
springboot与springcloud对应版本
java·spring boot·spring cloud
strayCat2325520 分钟前
4. Spring Boot 数据持久化(JPA)
java·spring boot·后端