jar包冲突总结

news/2024/11/24 9:30:59/

目录

    • 1. jar包冲突体现
    • 2. jar包冲突分类
    • 3. 解决

1. jar包冲突体现

构建时没问题, 但运行时会报错. jar冲突一般会报如下异常:

  1. java.lang.NoClassDefFoundError
  2. java.lang.NoSuchMethodException
  3. java.lang.NoSuchFieldException

总结就是找不到预期的Class/Method/Field
但如果构建后是包含该jar包的, 那基本可以确定就是jar冲突了

2. jar包冲突分类

jar包冲突按是否是jar版本的原因, 分为版本问题和包命名问题

  • 版本问题
    同一个jar引入了两个版本A和B, 构建时取了其中一个版本A, 这时候可能会冲突:
  1. 如果A是低版本, 代码里用了高版本B的代码, 调用时就会报上述的错
  2. 如果A是高版本, 但没有兼容B版本, 代码里调用了B版本独有的代码, 也会报错
  • 包命名问题
    两个不同的jar, 因为命名不规范定义了相同的全路径Class, 构建时没问题两个jar都被构建, 但调用时有可能会报错, 之所以说有可能还与具体的机器相关
  1. 如果机器先加载A包, 调用A包同路径Class的代码就不会报错
  2. 如果机器先加载A包, 调用B包同路径Class的代码就会报错
  3. 如果机器先加载A包, 调用B包同路径Class的代码, 但A包也有相同方法签名的方法, 此时不会报错, 但是调用逻辑可能是非预期但很难发现

3. 解决

只要找到原因, 根据上述两种分类对症下药即可

  • 版本问题
    必须要求新版本兼容老版本, 强行排去老版本

  • 包命名问题

方案1: 要求jar提供方重新打包, 按规范定义Class路径
方案2: 如果对其中一个jar只依赖该Class, 可以自己反编译自己重新定义
方案3: 如果深度依赖, 想办法让双方的该Class互相兼容
方案4: 如果双方包不方便重新打包(如第三方的包), 自己反编译后兼容改造后重新打成新的jar包, 引用新的jar包

方案1最优


http://www.ppmy.cn/news/6185.html

相关文章

蓝桥杯,我劝你不要参加的8个完美理由

蓝桥杯,是一个全国高校的IT技术比拼,如果你参加了,可能不止是刷题数量的剧增,还有你的软件人生 我劝你不要参加,因为如果你参加了,可能会有以下烦恼: 目录 1、会让你变得上进 2、会提前感受码…

Android 12.0 系统多个播放器app时,设置默认播放器

目录 1.概述 2.系统多个播放器app时,设置默认播放器的核心类

亚马逊首次亮相中性原子量子计算机Aquila

Aquila处理器内饰(图片来源:网络) 亚马逊网络服务(AWS)将在其名为Amazon Braket的特殊云服务器中托管量子计算机Aquila。这是量子计算第一次可以直接从AWS云端访问中性原子量子处理器。 而提供这台量子计算机的公司是Q…

win环境mysql版本升级到5.7过程

win环境mysql版本升级到5.7过程,我win电脑里mysql版本是5.0,版本太老了,也不支持和nacos集成(nacos至少需要5.6版本的mysql),思来想去还是要升级一下自己电脑的mysql版本,保守点升级到5.7吧&…

Elasticsearch倒排索引详解

这篇博客的主要目的是介绍一下ES当中的倒排索引,参考:https://blog.csdn.net/qq_21312297/article/details/102496833 https://zhuanlan.zhihu.com/p/68092794 https://baijiahao.baidu.com/s?id1661292466150156938&wfrspider&forpc https:…

【20天快速掌握Python】day12-文件操作

1.文件的打开与关闭 想一想: 如果想用word编写一份简历,应该有哪些流程呢? 打开word软件,新建一个word文件 写入个人简历信息 保存文件 关闭word软件 同样,在操作文件的整体过程与使用word编写一份简历的过程是很相…

Transformer实现以及Pytorch源码解读(四)-多头注意力机制MultiheadAttention

介绍 接前序的三篇Transformer解读博客,补充说明第三次博客中MltiheadAttention类的数据源码处理 涉及到的源文件 \site-packages\torch\nn\modules\activation.py \site-packages\torch\nn\functional.py 涉及到的函数 用到\site-packages\torch\nn\modules\a…

【LeetCode】在排序数组中查找元素的第一个和最后一个位置 [M](二分)

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode) 一、题目 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#x…