Maven如何解决版本依赖冲突

死牛胖子
• 阅读 344

Maven 的依赖具备传递性,一个项目会依赖很多包,这些依赖包又会依赖其它包,从而构成复杂的依赖关系,这其中相同的包可能会被多次依赖,如果依赖了多个版本,就会产生冲突,此时,Maven 需要一个选择策略,从多个版本中选择一个版本。

Maven 会根据以下两个原则来处理版本问题

最短路径优先原则

在项目依赖关系中,路径最短的版本会被使用。

例如:A 依赖两个版本的 C,依赖路径分别为

  • 路径1:A -> B -> C(1.0)
  • 路径2:A -> D -> E -> C(2.0)

路径1的距离比路径2的距离更短,所以 A 最终会选择路径1的 1.0 版本,虽然路径2的版本更高。

最先声明原则

当依赖路径一样长时,则采用最先声明原则,选择在 pom 文件中声明顺序更靠前的版本。

点赞
收藏
评论区
推荐文章
徐小夕 徐小夕
2年前
lerna + dumi + eslint多包管理实践
背景在开发大型项目时,我们通常会遇到同一工程依赖不同组件包,同时不同的组件包之间还会相互依赖的问题,那么如何管理组织这些依赖包就是一个迫在眉睫的问题.我们目前已有的方案有:Multirepo(多个依赖包独立进行git管理)和Monorepo(所有依赖库完全放入一个项目工程).Multirepo的缺点在于每个库变更之后,需要发布到线上,然后在项目
kenx kenx
3年前
Maven 基础标签之版本管理和冲突解决
前言我们在做java项目的时候由于jar包太多,我们就需要使用maven做项目管理,管理项目的jar包依赖,包括打包上线maven基础Maven是一个项目管理工具,主要用于项目构建,依赖管理,项目信息管理每个maven项目根目录都会有一个pom.xml文件,负责项目构建,依赖管理在这个文件里面,你只需要添加相应的jar包坐标配置,maven就会自动
Stella981 Stella981
3年前
Maven项目使用打包时使用本地jar包库
在使用maven管理项目时,有时候我们可能会使用一些第三方的jar包依赖库,但是这些jar包依赖库又没有在共有的maven仓库。通常只能下来放到本项目的lib目录下。但是我们打包时如果不做处理,那么打包后的fatjar中不会有lib文件夹中的相关jar包。打包后无法运行起来,因此需要做特殊处理,让maven打包时能够把使用到外部jar打进去。主要就是在
Stella981 Stella981
3年前
Maven 项目下slf4j 包冲突问题
今天遇到Maven下Jar包冲突问题.由于Mavenjar包是自动依赖..但是jar包依赖的版本不一样..会造成冲突就比如遇到:org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;说的slf4j
Stella981 Stella981
3年前
Maven项目中War包的打包及依赖方式
两个web项目之间的依赖引用方式。Web项目之间,通过war包的方式进行引用的。例如,有两个项目,puzzleweb和puzzlewebdemo,两个均是web项目,puzzlewebdemo依赖于puzzleweb,具体配置如下下载地址(https://www.oschina.net/action/GoToLink?urlhttp%3A%
Stella981 Stella981
3年前
Maven简介安装
什么是MavenMaven是一个由Apache公司推出的一个管理项目的工具,它包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统,和用来运行定义在生命周期阶段中插件目标的逻辑Maven能解决什么问题1.管理jar包,防止jar包冲突2.Maven也
Stella981 Stella981
3年前
Maven的使用(依赖冲突)
1.1Maven坐标坐标:每一个jar包或maven项目在网络上都有一个独一无二的身份证坐标(GAV)1.groupId公司或组织域名的倒序(仓库:包名)2.artifactId项目名或模块名(仓库:项目名)3.version版本号(仓库:版本号)坐标和本地仓库有关系么?
Stella981 Stella981
3年前
Python虚拟环境的创建和包下载
为什么使用虚拟环境因为直接在真实环境进行安装python的包会造成环境之间的污染,因此需要创建虚拟环境,原则上每一个项目都需要有一个独属于自己的虚拟环境Python项目的每次运行都需要启动环境,如果所有的模块都在一个环境中,不仅每次加载这些模块慢(尤其是开发过程中),并且依赖还可能相互冲突,甚至有些新引入的依赖会修改已安装模块的版
Maven进阶学习指南 | 京东云技术团队
当我们在开发项目时,有时需要用到外部依赖组件,例如当我们需要Json序列化的时候需要用到FastJson组件,我们可以通过下载对应jar包加载到项目中。但当一个大的项目同时需要依赖各种各样的外部服务,就存在着配置繁琐、依赖冲突等问题,因此可以通过maven来完成对应的依赖管理功能。
京东云开发者 京东云开发者
4个月前
实际上手体验maven面对冲突Jar包的加载规则
一、问题背景相信大家在日常的开发过程中都遇到过Jar包冲突的问题,emm,在最近处理业务需求时我也遇到了不同版本jar包冲突导致项目加载出错的问题。主要是一个完整的项目会不可避免的使用第三方的Jar包来实现功能开发,各种第三方包之间可能会存在依赖关系,不同
死牛胖子
死牛胖子
Lv1
悲歌可以当泣,远望可以当归。
文章
7
粉丝
1
获赞
0