Maven如何解决版本依赖冲突

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 文件中声明顺序更靠前的版本。

点赞
收藏

评论区

加载中...

相关推荐

lerna + dumi + eslint多包管理实践

背景在开发大型项目时,我们通常会遇到同一工程依赖不同组件包,同时不同的组件包之间还会相互依赖的问题,那么如何管理组织这些依赖包就是一个迫在眉睫的问题.我们目前已有的方案有:Multirepo(多个依赖包独立进行git管理)和Monorepo(所有依赖库完全放入一个项目工程).Multirepo的缺点在于每个库变更之后,需要发布到线上,然后在项目

Maven 基础标签之版本管理和冲突解决

前言我们在做java项目的时候由于jar包太多,我们就需要使用maven做项目管理,管理项目的jar包依赖,包括打包上线maven基础Maven是一个项目管理工具,主要用于项目构建,依赖管理,项目信息管理每个maven项目根目录都会有一个pom.xml文件,负责项目构建,依赖管理在这个文件里面,你只需要添加相应的jar包坐标配置,maven就会自动

Maven项目使用打包时使用本地jar包库

在使用maven管理项目时,有时候我们可能会使用一些第三方的jar包依赖库,但是这些jar包依赖库又没有在共有的maven仓库。通常只能下来放到本项目的lib目录下。但是我们打包时如果不做处理,那么打包后的fatjar中不会有lib文件夹中的相关jar包。打包后无法运行起来,因此需要做特殊处理,让maven打包时能够把使用到外部jar打进去。主要就是在

Maven 项目下slf4j 包冲突问题

今天遇到Maven下Jar包冲突问题.由于Mavenjar包是自动依赖..但是jar包依赖的版本不一样..会造成冲突就比如遇到:org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;说的slf4j

Maven项目中War包的打包及依赖方式

两个web项目之间的依赖引用方式。Web项目之间,通过war包的方式进行引用的。例如,有两个项目,puzzleweb和puzzlewebdemo,两个均是web项目,puzzlewebdemo依赖于puzzleweb,具体配置如下下载地址(https://www.oschina.net/action/GoToLink?urlhttp%3A%

Maven简介安装

什么是MavenMaven是一个由Apache公司推出的一个管理项目的工具,它包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统,和用来运行定义在生命周期阶段中插件目标的逻辑Maven能解决什么问题1.管理jar包,防止jar包冲突2.Maven也