1. 父项目的dependencyManagement

最开始,知道dependencyManagement是管理jar包版本的,如果在父项目中的该节点下声明了包的版本,子项目中在Dependencies中引用该包时就不需要声明版本了,这样保证多个子项目能够使用相同的包版本。
dependencyManagement不实际下载jar包,只会声明包的版本。如果Dependencies中声明了包的版本,则会覆盖dependencyManagement声明的版本。

2. 解决包冲突

但是,除了上面简单理解的dependencyManagement,其实它更强大的功能是解决包冲突,很多教程也这么说,但是我一直以为是第一种情况那样,不用再声明包版本了,达到所有子项目包版本相同的目的,实际上,一个项目中,同时使用dependencyManagement和Dependencies,基本上就告别了使用exclusions一个一个排除包来解决包冲突的方法,这种方式以前并没有注意到,或者很多教程没有特别强调,但是这个才是dependencyManagement的方便之处。
起因是我使用如下jar包:

<properties><activitti.version>5.22.0</activitti.version><spring.redis.version>1.6.2.RELEASE</spring.redis.version><spring.vserion>4.1.5.RELEASE</spring.vserion>
</properties>
<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>${spring.redis.version}</version>
</dependency>
...
<dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>${activitti.version}</version>
</dependency>

其中,spring-data-redis引入spring版本是4.1.9, 而activiti-spring引入的spring版本是4.1.5.
如下图所示:

两者引入的spring组件的版本各部相同,导致程序无法运行,此时第一反应是使用exclusions一个个排除冲突的jar包,操作十分麻烦,突然想到dependencyManagement,如果我把冲突的包放在其中,声明了版本,会怎么样,如下:

<dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.vserion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.vserion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.vserion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.vserion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.vserion}</version></dependency></dependencies>
</dependencyManagement><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>${spring.redis.version}</version>
</dependency>
...
<dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>${activitti.version}</version>
</dependency>

${spring.vserion}=4.1.5.RELEASE, 此时在dependencies之上,我添加了dependencyManagement,并且将所有冲突的jar包都声明了我想要的版本号,结果如下:

至此,可以告别exclusions了。

Maven之dependencyManagement相关推荐

  1. Maven中dependencyManagement的使用

    本文来说下Maven中dependencyManagement的使用 文章目录 dependencyManagement的使用 dependencyManagement的意义 dependencyMa ...

  2. maven中DependencyManagement和Dependencies

    上次这边朋友问我一个问题,就是他们在pom.xml中的dependency中,看到有一些是<scope>provided</scope>的情况,比如如下: 双击代码全选 1 2 ...

  3. cmenu 隐藏子项中的一个子项_区分Maven中dependencyManagement与dependencies的作用

    导读:使用maven是为了更好的帮项目管理包依赖,maven的核心就是pom.xml.而maven中有许多的标签,下面我们主要讨论parent.dependencies与dependencyManag ...

  4. maven 之dependencyManagement 和 pluginManagement

    一个大中型Java项目中,一般由若干个module组成,各个module各司其职,担任整个工程中不同角色.大多数情况下,大多数module都会用到相同的jar包,或者插件.如果每个module中都引入 ...

  5. Maven中dependencyManagement标签和dependencies的区别

    今天在maven的pom文件中看到了dependencyManagement标签,用法如下: <dependencyManagement><dependencies><d ...

  6. maven的dependencyManagement详解

    背景 最近接到一个jar包依赖统一管理的任务,提供一个类似于spring-framework-bom的pom管理项目(后续我称这个为pilot项目),在接到这个任务之前,对maven的熟悉程度只能说是 ...

  7. Maven <dependencyManagement>不生效、依赖报错、使用方法

    第一种用法(一对一):在父工程pom文件中,指定版本号,子模块版本号指向dependencyManagement维护的版本号,不用再写. <dependencyManagement>< ...

  8. Maven中的dependencyManagement 意义

    1.在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器. 2.pom.xml文件中,jar的版本判断的两种途径 1:如果dependenci ...

  9. maven 依赖版本管理— dependencyManagement

    在开发 spring boot 项目时,你是否遇到过,有些依赖即使不写版本号也能下载到某一版本的依赖. 比如下面这个案例 案例 pom文件 <?xml version="1.0&quo ...

  10. Maven 梳理 - Maven中的dependencyManagement 意义

    1.在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器. 2.pom.xml文件中,jar的版本判断的两种途径 1:如果dependenci ...

最新文章

  1. 如何在PowerShell中使用带有空格和引号的参数运行EXE文件
  2. VS2008工具,两种加入库的方法。 设置程序运行时目录
  3. Apache配置同一IP使用多域名对应多个网站
  4. 腾讯数据库RTOlt;30s,RPO=0高可用方案首次全景揭秘
  5. Jsoup设置元素的文本内容
  6. 湖畔大学官微改名为“湖畔创研中心”
  7. php字符串完全匹配,php之字符串和正则匹配
  8. html转word设置一二三级标题,word怎么设置一二三级标题
  9. 关于微信小程序,input框的值无法输入到e.detail.value
  10. 【Linux-GNU编译器套件(gcc/g++/gfortran)离线编译安装】
  11. iTechTag:声望创造价值
  12. mbk文件导入到oracle,将Oracle DMP文件导入到oracle的全新安装中
  13. Python学习笔记:使用PIL批量合成jpg+png图片,用于水印、合并图片,生成YOLO数据集+标注数据等等
  14. 有趣的灵魂不多,但有趣的设计素材这里很多
  15. 2.5 矩阵因式分解(第2章矩阵代数)
  16. 抖音xg03算法逆向杂谈
  17. 1660s功耗多少w_华硕GTX1660S功耗及散热对比GTX1060 3G 这才是甜品显卡的优势
  18. 之江汇空间如何加音乐背景_互动课堂的使用|之江汇互动课堂如何使用?之江汇互动课堂使用方法...
  19. Linux 文件系统的工作原理深度透析
  20. IIS上无法启动C#编写的WebService服务

热门文章

  1. ChIP-Atlas:基于公共chip_seq数据进行分析挖掘
  2. 新手下载安装GitHub
  3. hive窗口函数使用详解
  4. Excel线性回归分析
  5. 【神经网络】RBF神经网络逼近任意连续非线性函数的Simulink仿真
  6. spotify电脑下载歌曲_Spotify Music Converter mac版下载
  7. Linux中fork函数作用,深入解析Linux中的fork函数
  8. PassMark Software - PC Benchmark and Test Software - 软件和硬件基准测试
  9. 代理服务器基本知识普及代理IP使用方法!
  10. sip软电话免费下载地址(eyebeam)