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>

一般来说取高版本的,因为高版本的一般都会兼容低版本

文章转载自: ++isyues++

原文链接: maven为什么发生依赖冲突?怎么解决依赖冲突? - isyues - 博客园

体验地址: 引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

相关推荐
SimonKing几秒前
文档杂乱怎么查找:用 Papra 搭一个极简文档管理系统
java·后端·程序员
captain3761 分钟前
网络原理(7)-NAT(Network Address Translation)
java·网络·网络协议·java-ee
jaysee-sjc8 分钟前
【苍穹外卖】Day01:从零认识企业级项目开发
java·开发语言·数据库·mysql·spring·intellij-idea·mybatis
雨辰AI10 分钟前
多租户数据库资源配额管控|避免租户资源抢占雪崩(金仓 / 达梦 / 高斯 /openGauss 全库原生适配)
java·大数据·数据库·后端
AI深栈12 分钟前
第 12 章 · AI智能体的结构化输出与流式响应
java·人工智能
君顾117 分钟前
本地AI错题纠正小程序:端侧推理与错题闭环实战
java·开发语言·错题
Wang's Blog22 分钟前
Java 服务器: Linux-yum在线安装与lrzsz文件传输
java·服务器
Java内核笔记31 分钟前
Spring Boot 4 与 Spring AI 2.0 深度集成:ChatClient、Advisor 链与 MCP(源码级实战)
java·后端
可爱的小小小狼32 分钟前
【无标题】
java·算法
用户31268748772032 分钟前
Java SPI 到底怎么实现动态扩展的?从 ServiceLoader 到 Dubbo SPI 全链路拆解
java