Maven中pom文件内scope标签中import、parent 、dependencies、dependencyManagement详解

2023-11-16

**首先介绍parent**
如果父项目中有这些依赖
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>AAA</groupId>
                <artifactId>AAAA</artifactId>
                <version>Greenwich.RELEASE</version>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>BBB</groupId>
            <artifactId>BBB</artifactId>
             <version>8.2.0</version>
        </dependency>
        <dependency>
            <groupId>CCC</groupId>
            <artifactId>CCC</artifactId>
             <version>8.2.0</version>
        </dependency>
    </dependencies>
    **parent:**复用父类元素也就是    <dependencies>这个标签里面的依赖!
**dependencyManagement:**子模块中可以选择性继承父类的依赖,此标签中的依赖子pom不会自动继承,子pom需要额外声明。但是,当依赖版本在父POM中声明后,子模块在使用依赖的时候就无须声明版本,确保版本一致。
**Import:**只在dependencyManagement元素下才有效果,作用是将目标POM中的dependencyManagement配置导入并合并到当前POM的dependencyManagement元素中。

如果子项目中引用
<parent>
        <groupId>父项目</groupId>
        <artifactId>e-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../e-parent</relativePath>
    </parent>
则子项目中会引入**BBB**和CCC依赖

如果子项目中

 <dependencyManagement>
        <dependencies>
            <!-- <scope>import</scope>解决单继承问题,类似parent标签, -->
            <dependency>
                <groupId>父项目</groupId>
                <artifactId>父项目</artifactId>
                <version>Greenwich.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

则子项目中会引入**AAA**

好处:

在我们项目顶层的POM文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。

这样做的好处:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。

总结:

这种复用可以针对两种依赖,一种是定义在 <dependencies> 中的 <dependency>,这种是无条件继承的;还有一种是定义在 <dependencyManagement> 中的 <dependencies>,这种的如果要在子类中使用,需要手动声明,只需要声明 groupId 和 artifactId 就行,版本则不必声明。

使用 parent 一可以实现复用,二还可以统一管理依赖的版本。

import 能实现类似的功能,它能够解决 parent 不能实现的部分问题,比如多继承。但是相比 parent,它只能作用于 <dependencyMannagement> 元素,它所实现的就是能将目标中的配置导入当前 pom 中,但是不包括插件管理 plugin management。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maven中pom文件内scope标签中import、parent 、dependencies、dependencyManagement详解 的相关文章

随机推荐

  • 小程序使用mqtt时的问题

    由于业务需求 小程序项目中需使用mqtt 当我像Vue项目一样去使用时却出现了种种问题 归根结底还是因为没有去仔细看文档 因为英文文档实在懒得看 就那么顺其自然的写 结果浪费了一天时间 这里对小程序中使用mqttjs遇到的问题进行总结 mq
  • java获取两个时间之间的所有日期、月份、年份,返回列表

    需求描述 输入开始时间和结束时间 获取时间范围内的所有日期 月份 年份 输入可以为 yyyy MM dd HH mm ss 或者 yyyy MM dd 一 输入开始时间和结束时间 返回时间范围内中的所有日期列表 传入两个时间范围 返回这两个
  • Javascript组件化开发设计思想

    一 引言 项目中经常用web弹层组件 layer 其常见的代码如下 使用的时候很方便 弹窗的宽高 内容 标题 关闭按钮等弹窗的状态我们都可以通过配置参数配置 layer弹层组件用同一套代码来满足不同的弹窗层表现的需求 这便是组件开发的强大之
  • 服务器优化

    Windows Registry Editor Version 5 00 HKEY LOCAL MACHINE SYSTEM CurrentControlSet Services Tcpip Parameters 关闭无效网关的检查 当服务
  • 网站搭建学习 ubuntu(20.04) 无法使用ifconfig命令-解决办法

    想在新装好的ubuntu系统上部署django 一开始就遇到了问题 使用ifconfig命令时报错 于是按照提示安装net tools sudo apt install net tools 还是有报错 总之先按照系统提示来 用apt get
  • 如何终止一个无限循环线程和 程序退出时销毁线程

    http zhidao baidu com question 299079849 html android 启动了一个子线程 这个子线程是一个死循环 不成的打印 Hello 现在要实现点击一个Button 让这个子线程终止 用什么方法啊 s
  • 单相逆变器第四课、F28027最小系统绘画

    今天我们说的是F28027最小系统的绘画 其实我暂时还没有规划后面要用到什么引脚 所以我很任性的把所有GPIO引脚都接出去了 呵呵 先给大家上一个整体的图 看着图片是不是比较小 呵呵 没办法 截图最大的了 我晚点会把原理图和PCB上传到下载
  • VMware15中安装Linux详细教程

    VMware15中安装Linux详细教程 一 搭建VMware环境 1 打开链接 https www vmware com cn html 选择适合自己电脑系统的版本进行下载 2 下载完成后点击文件进行安装 安装界面如图 注 1 安装目录尽
  • 信息安全产品认证

    文章目录 一 引言 二 网络关键设备和网络安全专用产品安全认证证书 2 1 背景 2 2 产品目录 2 3 认证依据标准 2 4 认证机构 2 5 商密产品检测认证目录 与 网络关键设备和网络安全专用产品目录 的关系 三 中国国家信息安全产
  • 20个常见的Java错误以及规避方法

    原文 50 Common Java Errors and How to Avoid Them Part 1 作者 Angela Stringfellow 翻译 雁惊寒 译者注 本文介绍了20个常见的Java编译器错误 每种错误都包含了代码片
  • MKP勒索病毒:了解最新变种mkp,以及如何保护您的数据

    导言 在数字化时代 mkp 勒索病毒成为了网络安全领域的一大威胁 它采用高级加密技术 将您的数据文件锁定 要求支付赎金以解锁 本文将详细介绍 mkp 勒索病毒的工作原理 如何恢复被它加密的数据文件 以及如何采取预防措施来降低受攻击的风险 如
  • lambdaQuery用法

    lambdaQuery用法 LambdaQueryWrapper
  • pandas DataFrame行或列的删除方法

    pandas DataFrame的增删查改总结系列文章 pandas DaFrame的创建方法 pandas DataFrame的查询方法 pandas DataFrame行或列的删除方法 pandas DataFrame的修改方法 此文我
  • uniapp之微信小程序开发教程及如何合理使用WebSocket(实时监听)+workman聊天系统+linux系统配置阿里云端口

    添加链接描述 添加链接描述 thinphp6 1 workerman文档 添加链接描述 https www kancloud cn manual thinkphp6 0 1147857 workerman手册 https www worke
  • 软件的最低测试方法

    前言 1 1 引言 对于大部分软件系统 如何测试及有效的测试 是一个很头痛的问题 在软件工程上 测试是软件工程中极其重要的一部分 但在具体的实际情况上 无论是时间 人手及资源的调配等原因 使国内大部分软件公司没有进行过理论上的完整的测试 本
  • JAVA变量与数据类型

    人生不如意之事十有八九 在最好的年纪要努力充实自己 莫等空悲切白了少年头 而是要及时当勉励 岁月不待人 一 java变量 变量概述 1 内存中存储的一个存储区域 2 该存储区域内的数据在同一类型范围内不断变化 3 变量是程序中最基本的存储单
  • 老虎证券美股策略——将动量策略日频调仓改成月频

    最近策略频繁回撤 跑不赢标普500指数 所以对策略简单修改 以待后效 新加入的代码 def get if trade day infile open countday dat r incontent infile read infile c
  • Linux系统中负载较高问题排查思路与解决方法

    Load 就是对计算机干活多少的度量 Load Average 就是一段时间 1分钟 5分钟 15分钟 内平均Load linux服务器出现高负载的情况下 一般都有一些具体的症状 比如cpu 内存等被耗尽 磁盘IO或者网络等出现问题 下面通
  • CentOS7下安装LNMP以及phpMyAdmin

    两种安装 第一种 下载 可以到官网找 版本 https www phpmyadmin net downloads cd 到你要下载的位置 wget https files phpmyadmin net phpMyAdmin 4 4 12 p
  • Maven中pom文件内scope标签中import、parent 、dependencies、dependencyManagement详解

    首先介绍parent 如果父项目中有这些依赖