随笔记录之---maven版本管理(dependencyManagement,import)

2023-11-02

dependencyManagment

介绍前先说,没有这个东西的时候产生发问题 ,大家都知道maven 的父子工程目的是为了,像代码一样抽出公共部分的内容,放到父类里,减少重复的代码,在不同的模块下,确有多个相同的依赖依赖 。

例如 spring容器的依赖,写java的似乎没有人不用spring的那几个依赖包,或者在企业项目里抽象出的一些工具类,大家都要用的, 那么通常的做法,是公司的架构中,每个模块都继承一个统一的父pom, 这个父pom,定义了一些常用的 depency, 这样就省去每个负责模块的开发人员在单独引入,这样做的好处,可以用一个父pom 集中管理,因为我们日常开发中很可能遇到,不同版本的jar,带来的不必要的麻烦,管理起来每个人引用的依赖版本是个好的方法。

好的这样又引入了一个新的问题,对于继承了父pom的模块,它可能仅仅需要,父pom 中的部分 depency,其他的不需要怎么办?

解决办法: 其实就是每个模块根据自己需要来引入,想要用的模块啦,但是这不是又回到了刚刚的问题么? 那我还继承父pom 干嘛?对于这种情况,maven 是通过 dependcyManagment 标签来解决的,此标签只能解决,规定每个模块所引用的依赖版本。

看一个例子吧:
父pom

 <dependencyManagement>
        <dependencies>
       <!--一个好用的工具类-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.0.12</version>
         </dependency>
        </dependencies>
    </dependencyManagement>
    ```
    子pom
 ```xml
 <dependencies>
         <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
         </dependency>
      
        </dependencies>

假如父pom中的 hutool-all 依赖并不是每个子模块都想引入的,但是父pom 又想管理此dependency 的版本,那么父pom ,可以使用dependencyManagement 标签管理此 hutool-all 的版本,而且可以满足,继承父pom的每个子模块本身是没有引入 hutool-all ,只有显示的在自己的pom 中 用 dependency 声明就行,但是版本号会默认使用父pom 中dependencyManagement 标签所管理的。

通常在企业里类似这样的操作:

父pom

 
 <dependencyManagement>
        <dependencies>
       <!--一个好用的工具类-->
          <!--springcloud 组件-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2.1.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
 

spring-cloud-dependencies 本身就是一个父pom它,管理着很多 org.springframework.cloud 的版本, 这看起来就像在一个java 类中又import 另一个包,所以一个pom 可以通过继承一个父pom, 同时又可以让父pom 通过 dependencyManagement 标签来 用 import 引入另一个父pom管理的版本,这解决了一个pom 只能单一继承一个父,可以通过import 的方法引入其他父pom。

注意: pom 一般父工程,或者聚合工程的pom 打包类型都是pom ,表示此项目仅仅是做版本管理,一般没有 src/main/java之类的文件夹,不需要打包。

所以在企业里,大型的微服务下,会有这么几类负责管理版本依赖的pom,

1 父pom,管理这通用的依赖,管理常用框架的版本。
2 私有依赖pom,这个相等与引入的另一个父pom,不同的是,此pom 一般用来专门存放每个微服务自己的客户端,供给其他业务组使用。每个微服务到公共的pom 下更新自己的依赖,就省去了 其他微服务要手动改版本这件事情。

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

随笔记录之---maven版本管理(dependencyManagement,import) 的相关文章

随机推荐

  • python判断一个集合是否为另一个集合的子集

    a 1 2 3 4 b set 1 2 b issubset a
  • FusionAD:用于自动驾驶预测和规划任务的多模态融合

    论文背景 自动驾驶 AD 任务通常分为感知 预测和规划 在传统范式中 AD中的每个学习模块分别使用自己的主干 独立地学习任务 以前 基于端到端学习的方法通常基于透视视图相机和激光雷达信息直接输出控制命令或轨迹 论文提出了基于BEV多模态的多
  • new JSONObject(true)

    构造容量为16个单位的HashMap作为JSONObject JSONObject jsonObject new JSONObject 构造容量为16个单位JSONObject 可选择器容器是否有序 LinkedHashMap true H
  • Mysql GROUP_CONCAT(expr) 介绍

    1 MYSQL版本 Welcome to the MySQL monitor Commands end with or g Your MySQL connection id is 86693 Server version 5 7 23 My
  • TCP和UDP的最完整的区别

    转自 https blog csdn net li ning article details 52117463 TCP UDPTCP与UDP基本区别 1 基于连接与无连接 2 TCP要求系统资源较多 UDP较少 3 UDP程序结构较简单 4
  • 防逆向技术简史:从代码混淆到虚拟机保护技术

    那么如何才能保护自己开发APP不被逆向破解呢 在道高一尺魔高一丈的网络安全攻防对抗中 防逆向保护技术也在不停更新演进 我在这里梳理了几个关键时期的防逆向保护技术 让大家对APP防护有一个更好理解 启蒙阶段 防逆向保护始于代码混淆技术 这个时
  • git使用——merge、rebase 区别和 idea 里的 Merge into current、Rebase current onto seleced 使用

    文章目录 1 Git 中 merge 和 rebase 的区别 2 在Intellij idea 中的使用 1 Git 中 merge 和 rebase 的区别 简介 git pull rebase和 git pull区别 是git fet
  • 【记录】mmsegmentation 训练自己的数据集

    文章目录 数据集标注工具选择 labeme 标注 精灵标注助手 photoshop标注 标准格式转换 转化为COCO格式 转化为VOC格式 json文件 mask图像 划分训练集和测试集 修改配置文件 修改data root为自己的路径 搜
  • vue:vue的计算属性以及监听属性(三)

    1 计算属性 相较于函数而言计算属性更加智能 他是基于它们的响应式依赖进行缓存的 也就是说只要相关依赖 下述例子中的area 没有发生改变 那么这个计算属性的函数不会重新执行 而是直接返回之前的值 这个缓存功能让计算属性访问更加高效 只要修
  • 解决STM32进行IAP升级跳转至APP后无法进中断问题

    最近碰到STM32在进行IAP升级时跳转至APP后无法进入中断 导致程序无法运行 正常情况下STM32进行IAP升级时 在跳转至APP程序之前 应该关闭外设 关闭中断 BootLoader中跳转程序如下 typedef void pFunc
  • Centos7 使用nginx 和 supervisord 部署python +tornado+nodejs

    一 我用到的工具是netty winscp linux 环境下安装nginx步骤 开始前 请确认gcc g 开发类库是否装好 默认已经安装 yum y install gcc gcc c 安装gcc和c 编译器 1 centOS安装依赖 y
  • vue动态判断input readonly属性

    1 如果isReadOnly等于true时 input只读 否则可以编辑
  • chatgpt赋能python:Python怎么求平均值?全面解析平均值计算方法

    Python怎么求平均值 全面解析平均值计算方法 作为一种简洁易用的计算机编程语言 Python的应用范围已经越来越广泛 在Python中 我们可以轻松地进行各种统计和计算工作 其中求平均值是最常见的计算之一 在本文中 我们将全面解析Pyt
  • JVM——8.调优工具1(jstat)

    文章目录 1 使用背景 2 jstat 的介绍及使用 2 1 jstat gc PID 介绍 2 2 其他的 jstat命令 2 3 jstat gc PID 使用 3 关注指标及计算分析 3 1 关注指标 3 2 计算分析 1 使用背景
  • linux 下家目录,根目录区别,以及普通用户到root用户的转换

    根目录 指的是最上层的目录 根目录之下有很多目录 如 home etc lib root 家目录 一般普通用户 家目录是 home 用户名 root用户 家目录是 root 如何普通用户切换到root用户 1 su 2 su root 需要
  • MySQL常见的高可用架构

    MySQL常见的高可用架构 概述 1 基于共享存储的方案SAN 优点 限制或缺点 2 基于磁盘复制的方案 MySQL DRDB架构 优点 限制或缺点 3 MySQL MHA架构 优点 缺点 4 MySQL MMM架构 优点 缺点 服务器资源
  • get方式长度受限,如何将较长数据传递到后台

    get方式长度有限制 所以只能用post方式 ajax url baseUrl dd sendDataToServer type post 数据发送方式 data tableJson tableJson async false succes
  • STM32——SPI通信

    文章目录 一 SPI通信 二 硬件电路 三 移位示意图 四 SPI时序基本单元 交换一个字节 模式0 用的多 交换一个字节 模式1 交换一个字节 模式2 交换一个字节 模式3 五 SPI时序 发送指令 写使能 指定地址写 指定地址读 六 W
  • LeetCode14:最长公共前缀

    题目 编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 示例 1 输入 flower flow flight 输出 fl 示例 2 输入 dog racecar car 输出 解释 输入不存在公共前缀 说明 所
  • 随笔记录之---maven版本管理(dependencyManagement,import)

    dependencyManagment 介绍前先说 没有这个东西的时候产生发问题 大家都知道maven 的父子工程目的是为了 像代码一样抽出公共部分的内容 放到父类里 减少重复的代码 在不同的模块下 确有多个相同的依赖依赖 例如 sprin