首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Maven】006-Maven 依赖传递和依赖冲突

【Maven】006-Maven 依赖传递和依赖冲突 一、依赖传递 1、概述 概念: Maven 依赖传递是指当一个项目依赖于另一个项目或库时,Maven 会自动解析和获取这些依赖,确保项目能够顺利构建和运行...作用: 简化项目管理:Maven 通过依赖传递简化了项目的管理,开发者只需声明直接依赖,Maven 会负责解析和获取所有的间接依赖。...传递的原则: 传递性: Maven 会自动传递依赖,确保直接依赖所需的库的所有间接依赖也能够被正确解析和获取。...依赖传递终止: 依赖传递会一直进行,直到达到最底层的库,这个库没有其他依赖为止。终止依赖传递的库被称为叶子节点。 通常,Java 标准库是依赖传递的终止点,因为它们不再依赖其他库。...依赖冲突避免出现重复依赖,并且终止依赖传递! Maven 自动解决依赖冲突问题能力,会按照自己的原则,进行重复依赖选择。同时也提供了手动解决的冲突的方式,不过不推荐!

7700
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Maven - 依赖范围和传递性依赖

    Maven的传递性依赖 什么是传递性依赖 有时候我们在pom.xml文件中引入的依赖,其本身就需要依赖于其他的依赖,这时候我们不需要去考虑这些依赖,Maven会解析各个直接依赖的pom,将那些必要的间接依赖...,以传递性依赖的形式引入到当前的项目中。...通过传递性依赖,我们可以在pom.xml文件中少写不少的依赖配置 传递性依赖的依赖范围 假如当前项目为A,A依赖于B,B依赖于C。...此时称A对于B是第一直接依赖,B对于C是第二直接依赖,而A对于C是传递性依赖。只要知道B在A项目中的scope,就可以知道C在A中的scope。...其依赖范围如下: 表格的第一列是B在A中的依赖范围,第一行是C在B中的依赖范围,交叉的格子是C在A中的依赖范围;下表中的-表示不传递依赖。

    1.2K10

    说说maven依赖冲突,依赖调解,依赖传递和依赖范围

    说maven依赖冲突之前需要先说说maven的 依赖传递。 依赖传递 当前项目引入了一个依赖,该依赖的依赖也会被引入项目。...更加准确的说法是,maven会解析直接依赖的POM,将那些必要的间接依赖,以传递依赖的形式引入到当前项目中。 为什么说是’必要的间接依赖‘呢?这是因为不是所有的间接依赖都会被引入的。...如果依赖范围合适的话,B中依赖的X也是会传递到A项目中的。而两个X的版本不一致,这就产生了依赖冲突。 在依赖冲突发生时,maven不会直接提示错误,而是用一套规则来进行 依赖调解。...大部分情况下maven这种自动的依赖调解能帮我们解决问题了。但是有时候我们不得不手动处理依赖冲突。这种冲突可能不是同一个依赖的不同版本(这个依赖调解能搞定),而是不能同时出现的两个依赖。...对于重复和冲突的依赖,会提示omitted for duplicate和omitted for conflict with x.x.x。 第二个方法是使用maven的enforcer插件。

    1.2K30

    Maven Helper插件——实现一键Maven依赖冲突问题

    application so that it contains a single, compatible version of com.google.common.collect.FluentIterable 出现这个问题...,大概猜测到,应该是Maven依赖冲突导致的,忽然想到,是否有可以检查maven依赖冲突的插件呢,一查发现还真有,而且极方便。...这个Idea插件,叫Maven Helper,根据File -> Settings -> Plugins -> Marketplace 输入Maven Helper即可找到。...image.png 切换至【Dependency Analyzer】栏,在搜索框输入冲突包guava,即会出现,guava都被哪些包依赖了,当多个组件包都依赖了同一个包但又不同版本时,很容易久出现各种冲突...红色部分即是导致启动报异常的地方,可见,springfox-core已经依赖的是20.0包,但其他还依赖18版本的包,这里可以把报错提示的18.0版本的通过exclusion去除即可。

    86510

    eclipse配置SVN和Maven插件

    eclipse配置SVN和Maven插件 开发环境配置手册 1、 下载最新版本eclipse JAVAEE版本 https://www.eclipse.org/downloads/ 2、 启动eclipse...使用如下方法安装 Help–Install New Software 注意:目前只能安装1.8.x这个版本的SVN,如果使用高版本的SVN,在安装SVN和maven整合插件的时候就会报错,这应该是插件的...插件(最新版eclipse已经安装过了,所以不需要) Help–Eclipse Marketplaces搜索maven安装maven integration for eclipse 5、 安装maven...7、 安装Properties editor插件 该插件是在做国际化的时候,打开资源文件直接编辑中文 Help–Eclipse Marketplaces搜索maven安装Properties Editor...8、 安装Eclipse Explorer插件 该插件是为了在windows窗口打开文件所在位置 Help–Eclipse Marketplaces搜索maven安装Eclipse Explorer

    41710

    Maven依赖冲突问题

    例如,项目A有这样的依赖关系: A -> C -> X(1.0) B -> D -> X(2.0) X是A的 传递性依赖 ,但是两条依赖路径上有两个版本的X,那么哪个X会被 Maven 解析使用呢?...在绝对大多数情况下,依赖冲突问题并不需要我们考虑,Maven 工具会自动根绝依赖原则选择,这里我们先假设最终引用的 X(1.0) 版本, 1、你想如果B引用 X(2.0) 的新创建的类,但因为最终被解析的是...传递性依赖会给项目引入很多依赖,简化项目依赖管理,但是也会带来问题。 最明显的就是容易发生依赖冲突。...4、Maven Helper 插件分析jar包冲突 如果你的项目中依赖许许多多的 Jar ,肉眼排查就没那么方便了,这里推荐一个 Maven 管理插件 在 Pom 文件中看到 Dependency Analyzer...标志,说明 Maven Helper 插件就安装成功了。

    46510

    Maven精选系列--依赖范围、传递、排除

    今天讲讲如何管理依赖,及依赖的范围、传递性等特征。 添加依赖 下面我添加了一个spring-web的依赖,maven就会去下载spring-web的jar包及它依赖的一些jar包。...Maven2.0.9之后新增的范围,只能用在中,并且导入的type为pom类型的父工程配置,一般用来解决多继承问题。...依赖传递 依赖的传递前面讲过通过继承和聚合的方式可以达到,通过继承的方式可以轻松的从父项目继承过来,通过聚合的方式也可以间接的传递过来。...继承:A继承B,A就可以继承B的dependencies依赖。 聚合:A依赖C,C依赖D,那么A就要依赖D自然也就获取了D的依赖。 下面这是dubbo的直接依赖和所有间接依赖的关系列表。...依赖排除 在依赖传递过程中,如A依赖B、S2.0,B依赖C、S1.0,这样A就有了S1.0和S2.0两个依赖,这样某些情况下会造成冲突需要手动把B间接传递过来的依赖排除掉,就是不依赖B带过来的S1.0的包

    1.2K120

    Maven 依赖调解源码解析(三):传递依赖,路径最近者优先

    场景 A有这样的依赖关系:A->B->C->X(1.0)、A->D->X(2.0),X是A的传递性依赖,但是两条依赖路径上有两个版本的X,那么哪个X会被Maven解析使用呢?...我们最终在maven-dependency-tree这个插件项目中发现了这段输出的源头: 此时我们可以用前面讲述的调试方法(注意是调试插件maven-dependency-tree),在这里打断点,从而找出调用链...继续往上找调用链: 我们发现 omitForNearer 这个方法的定义在 apache-maven-3.6.3 这个核心项目中的 ResolutionListener 类中,而插件 maven-dependency-tree...那么问题来了,什么时候会调用 conflictResolver.resolveConflict( previous, node ) 呢?...比如Maven 有插件可以将版本更新到最新,应该就是用了 NewestConflictResolver 这个版本最新者优先的调解器,本文不再探索,有兴趣的读者可自行研究。

    60130

    【Android Gradle 插件】Gradle 依赖管理 ⑦ ( dependencies 传递依赖设置 | transitive 关闭依赖传递配置 | exclude 排除子依赖配置 )

    文章目录 一、dependencies 依赖传递层级 二、transitive 关闭依赖传递配置 三、exclude 排除子依赖配置 Android Plugin DSL Reference 参考文档...Gradle 插件】Gradle 依赖管理 ① ( org.gradle.api.Project 配置 | Android Gradle 插件配置与 Gradle 配置关联 ) ★ Android...参考文档 : https://developer.android.google.cn/studio/build/dependencies 一、dependencies 依赖传递层级 ---- 在上一篇博客中...; 进行了上述设置后 , 调用 fresco 函数库肯定会出现问题 ; 三、exclude 排除子依赖配置 ---- 设置 exclude 属性 , 可以排除依赖库的某个子依赖 , 并且在外部进行依赖..., 可以有效解决依赖库冲突问题 ; dependencies { implementation 'com.facebook.fresco:fresco:0.14.0', { transitive

    95920

    Maven实战之旅第三篇——eclipse安装maven插件

    Maven实战之旅第三篇——eclipse安装maven插件 Maven安装方式有三种,第一种是离线安装,用 link 的方式来安装,这种方式可拔性更好,可以随时将插件插上和拔下,非常方便。...点击add,name输入m2eclipse(这里可以随便输入,输入名字实际上是为了eclipse方便管理安装的插件,重要的是下面的location),在location输入下载eclipse 的maven...插件,下载地址可以这样获取 点击连接:http://www.eclipse.org/m2e/index.html 进入网站后点击download,拉到最下面可以看到很多eclipse maven插件的版本和发布时间...安装完后你要重启eclipse,为了使得Eclipse中安装的Maven插件,同windows中安装的那个相同,需要让eclipse中的maven重新定位一下,点击Window -> Preference...至此eclipse安装maven插件就完成了

    1.1K20

    【Android Gradle 插件】Android 依赖管理 ⑤ ( Gradle 依赖优化 | 命令行查看依赖模块 | 依赖冲突问题 | 依赖传递冲突 | 分库冲突 | 依赖分组不同导致冲突 )

    文章目录 一、Gradle 依赖优化 二、命令行查看依赖模块 1、使用最高版本依赖选择 2、排除重复依赖 3、排除重复依赖 + 最高版本依赖选择 三、依赖传递冲突解决方案 1、依赖传递冲突 2、分库冲突...是默认支持依赖传递的 ; 二、命令行查看依赖模块 ---- 在 Android Studio 的 Terminal 面板中 , 执行 gradlew app:dependencies --configuration...repository from your build scripts and migrate your build to other Maven repositories....---- 1、依赖传递冲突 依赖传递冲突 : 在依赖配置中 , 可能存在这种情况 , 应用中引入了第三方库 A , A 存在 B 依赖库的 1.0 版本依赖 , 同时应用中又导入了 B 依赖库的 2.0...这就导致了依赖冲突 ; 这是由于程序传递 , 导致的程序间依赖库不兼容 的 依赖冲突问题 ; 这是由于依赖版本不同导致的依赖冲突 ; 2、分库冲突 依赖库可能存在分库 , 如 : 依赖库 A 中 , 包含了

    2.9K30
    领券