maven为什么发生依赖冲突?怎么解决依赖冲突?
maven为什么发生依赖冲突?怎么解决依赖冲突?
我们在开发的时候,偶尔会遇到依赖冲突的时候,一般都是NoClassDefFoundError、ClassNotFoundException、NoSuchMethodError。打开搜索框又发现有这个类,明明就是引入进来了,就是找不到,让人头疼
1. 依赖冲突场景
在maven中依赖管理,依赖是可以传播的
假设:我有个A项目。第一步A项目引入B依赖,B依赖又会引入C依赖(版本1.1),那么A项目就同时拥有了B、C依赖(版本1.1),第二步我再引入D依赖,D依赖引入C依赖(版本1.2)
图解:
第一步:A -> B -> C(1.1版本)
第二步:A -> D -> C (1.2版本)
问题来了,maven会取哪个版本的C进行引入?
2. 当冲突时maven怎么样选择
针对依赖冲突场景提出的问题,答案是:1.1版本
为什么是1.1 版本?因为maven有几条原则,按照原则优先级选择
2.1 就近原则
哪个依赖离的近取哪个
假设:我有个A项目。第一步A项目引入B依赖,B依赖又会引入C依赖(版本1.1)。第二步,在本项目pom中引入C依赖(版本1.2)
图解:
第一步:A -> B -> C(1.1版本)
第二步:A -> C (1.2版本)
那必须是1.2版本啊
2.2 第一声明者原则
通俗一点就是,就近原则如果相同判断不出来,谁先来谁选择谁
假设:我有个A项目。第一步A项目引入B依赖,B依赖又会引入C依赖(版本1.1),那么A项目就同时拥有了B、C依赖(版本1.1),第二步我再引入D依赖,D依赖引入C依赖(版本1.2)
图解:
第一步:A -> B -> C(1.1版本)
第二步:A -> D -> C (1.2版本)
那必须是1.1版本啊
3. 怎么样解决冲突?
idea下载Maven Helper插件
点击pom文件左下角
点击Conflicts选择冲突选项
右键,点击Exclude排除
返回pom文件发现自动加了exclusions标签进行排除
<exclusions>
<exclusion>
<artifactId>poi-ooxml-schemas</artifactId>
<groupId>org.apache.poi</groupId>
</exclusion>
</exclusions>
一般来说取高版本的,因为高版本的一般都会兼容低版本
maven为什么发生依赖冲突?怎么解决依赖冲突?的更多相关文章
- IDEA maven项目查自动查看依赖关系,解决包冲突问题
在maven项目中找到pom.xml,打开. <dependencies> <dependency> <groupId>org.apache.storm</g ...
- maven 使用 国内镜像的方法 解决依赖下载慢
转自:http://blog.csdn.net/banqgg/article/details/55804569 Maven是当前流行的项目管理工具,但官方的库在国外经常连不上,连上也下载速度很慢.国内 ...
- maven依赖冲突以及解决方法
什么是依赖冲突 依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成类包版本冲突 依赖冲突的原因 依赖冲突很经常是类包之间的间接依赖引起的.每个显式声明的类包都会依赖于一些其它的隐式类包, ...
- Maven依赖传递、依赖传递排除、依赖冲突
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6628429.html 一:Maven依赖传递 假如有Maven项目A,项目B依赖A,项目C依赖B.那么我们可 ...
- Maven学习笔记(四):协调和依赖
Maven协调具体的解释: Maven定义了这样一组规则:世界上不论什么一个构件都能够使用Maven坐标唯一标识.Maven坐标的元素包含groupId.artifactId.version ...
- dpkg安装deb缺少依赖包的解决方法
[先贴出解决方案(基于Ubuntu)]: 使用dpkg -i *.deb 的时候出现依赖没有安装 使用apt-get -f -y install 解决依赖问题后再执行dpkg安装deb包 === ...
- Maven 基础(二) | 解决依赖冲突的正确姿势
一.依赖原则 假设,在 JavaMavenService2 模块中,log4j 的版本是 1.2.7,在 JavaMavenService1 模块中,它虽然继承于 JavaMavenService2 ...
- 【maven】maven查看项目依赖并解决依赖冲突的问题
一.问题 项目开发过程中,经常会遇到jar冲突,然后maven根据自己的规则进行冲突解决,导致项目在运行的过程中报错. 1.maven自动解决依赖冲突的规则是什么? 2.如何查看当前项目的maven的 ...
- 利用mvn/maven如何检查依赖冲突,并解决依赖冲突
mvn/maven如何检查依赖冲突,并解决依赖冲突 如图,点击图示位置,就可以把整个项目的依赖关系展示出来 在图里选中一个artifact,则所有依赖该artifact的地方都会一起连带出来突出显示, ...
- 解决maven依赖传递中的版本冲突问题
通常情况下,我们都比较喜欢使用maven进行项目管理,要加个依赖包也非常简单,不需要到处去下载jar包,当然除了maven之外,也还有一些非常不错的工具.在使用maven进行项目依赖管理的时候,有时候 ...
随机推荐
- 查看GPU支持的CUDA版本
针对的是英伟达GPU.操作步骤如下: 打开NVIDIA Control Panel(NVIDIA控制面板) 可以在搜索里直接搜索,如下图所示: 在打开的控制面板中点击"帮助",如下 ...
- kubernetes系列(二) - kubectl的入门操作
目录 1. 安装 / 卸载 1 .1 前提条件 1.2 安装方式 1.3 卸载 2. 通过 minikube 学习 k8s 实操基础 2.1 创建集群 2.2 部署应用 2.3 探索当前应用[故障排除 ...
- CDS标准视图:维护通知任务数据 I_MaintNotificationTaskData
视图名称:维护通知任务数据 I_MaintNotificationTaskData 视图类型:基础 视图代码:IW67/IW23 点击查看代码 @AbapCatalog.sqlViewName: 'I ...
- python基础学习4
打开文件的方式 # 第一种 f = open('C:\project\pycharmprojects\\bigdata33\day05/cars.csv', mode='r', encoding='U ...
- c# 微软小冰-虚拟女友聊天
using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System ...
- 项目PMP之五项目范围管理
项目PMP之五--项目范围管理 一.定义:确保项目做且只做所需的工作:范围包括产品范围(特性和功能)和项目范围(交付产品所需完成的工作) 适应型生命周期:相关方持续参与,应对大量变更(敏捷),实时 ...
- openbox每日开机自动切换网络壁纸
目的 利用bing的每日一图, 每天切换壁纸 开干 联网后下载图片 利用networkmanage启动后执行脚本 netafter.sh 文件地址: /etc/NetworkManager/dispa ...
- ARM单片机知识点
1.STM32编译信息 代码占用FLASH 大小为:Code + RO-data, 7420字节(5054+2366),所用的RAM 大小为:RW-data + ZI-data, 8576(372+8 ...
- mysql存储过程取得错误信息的方式。
GET DIAGNOSTICS CONDITION 1 @v_sqlstate=RETURNED_SQLSTATE,@v_message= MESSAGE_TEXT; SELECT @v_sqlsta ...
- java中的ArrayBlockingQueue
ArrayBlockingQueue ArrayBlockingQueue 是 Java 并发包 (java.util.concurrent) 中的一个线程安全的阻塞队列实现. 它基于数组实现,容量固 ...