type
Post
status
Published
date
Aug 12, 2024
slug
summary
依赖版本冲突如何定位、如何解决
tags
问题集(技术)
category
技术分享
icon
password

本文目的

依赖版本冲突如何定位、如何解决 今天有个同事遇到一个诡异的事情,就是明明引用代码有那个方法但运行总报错找不到java.lang.NoSuchMethodError,盲猜版本冲突(遇到很多次都是版本冲突)

问题复现

代码依赖
测试代码

定位问题与解决

通过报错分析问题

XMLHelper.newDocumentBuilder()找不到方法,跟踪到org.apache.poi.ooxml.util.DocumentHelper#newDocumentBuilder,里面 return XMLHelper.newDocumentBuilder();导航到XMLHelper,发现有这个方法的呀!
notion image
那大概率是版本冲突了, 但为什么导航过去是有这个方法的,双击shirt全局搜索类XMLHelper,好家伙真的有两个类但不同版本进去发现4.1.2是有这个方法,而4.1.0里没有。
notion image

确认问题

应该是加载到4.1.0版本了,但是如何确认的 两个方式: 1.debug 2.使用插件Maven Helper

1、debug

将断点放在org.apache.poi.ooxml.util.DocumentHelper#newDocumentBuilder这,运行debug模式
notion image
到了断点打开表达是求值放入 DocumentHelper.class.getClassLoader().findClass("org.apache.poi.util.XMLHelper") 再求值如图所示,再点导航,发现进入的是4.1.0版本
notion image

2、Maven Helper

点击pom.xml左下角有Dependency Analyzer再选择Conflicts(展示冲突),左边是冲突内容,右边是来自哪个依赖及其版本层级以及最终使用了哪个依赖(红色方块就是实际使用的依赖版本
notion image

解决

排查poi依赖,因为easypoi-base只是用来填充word模板参数而引入的easyexcel则是主要用来操作excel所以将easypoi-base中依赖版本移除减少出问题的概率(排除依赖需要考虑影响范围,如果都没影响排除谁都无所谓) 排除poi-ooxml-schemas也一样 排除完 点击上面Reimport刷新依赖,等Refresh UI有个感叹号再点击刷新,冲突没有了,再运行则正常结束
notion image
notion image
最终pom文件

🤗 总结归纳

java.lang.NoSuchMethodError遇到这个报错基本是版本冲突没得跑,除非是少了依赖 所以需要根据错误分析问题再对症下药,合理使用插件,提高解决问题效率
 
💡
有关使用上的问题,欢迎您在底部评论区留言,一起交流~
SpringBootAdmin日志获取日志文件失败Cannot read properties of undefined (reading 'split')Spring之循环依赖
Loading...