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中的内容了

相关推荐
A懿轩A4 分钟前
【Maven 构建工具】从零到上手 Maven:安装配置 + IDEA 集成 + 第一个项目(保姆级教程)
java·maven·intellij-idea
野犬寒鸦13 分钟前
从零起步学习并发编程 || 第一章:初步认识进程与线程
java·服务器·后端·学习
科技林总17 分钟前
【系统分析师】6.3 企业信息化规划
学习
我爱娃哈哈17 分钟前
SpringBoot + Flowable + 自定义节点:可视化工作流引擎,支持请假、报销、审批全场景
java·spring boot·后端
XiaoFan01236 分钟前
将有向工作流图转为结构树的实现
java·数据结构·决策树
小突突突1 小时前
浅谈Java中的反射
java·开发语言
Anastasiozzzz1 小时前
LeetCode Hot100 295. 数据流的中位数 MedianFinder
java·服务器·前端
我真的是大笨蛋1 小时前
Redo Log详解
java·数据库·sql·mysql·性能优化
丝斯20111 小时前
AI学习笔记整理(67)——大模型的Benchmark(基准测试)
人工智能·笔记·学习
索荣荣1 小时前
Java动态代理实战:从原理到精通
java·开发语言