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,发现有这个方法的呀!

那大概率是版本冲突了, 但为什么导航过去是有这个方法的,双击shirt全局搜索类XMLHelper,好家伙真的有两个类但不同版本进去发现4.1.2是有这个方法,而4.1.0里没有。

确认问题
应该是加载到4.1.0版本了,但是如何确认的 两个方式: 1.debug 2.使用插件Maven Helper
1、debug
将断点放在org.apache.poi.ooxml.util.DocumentHelper#newDocumentBuilder这,运行debug模式

到了断点打开表达是求值放入 DocumentHelper.class.getClassLoader().findClass("org.apache.poi.util.XMLHelper") 再求值如图所示,再点导航,发现进入的是4.1.0版本

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

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


最终pom文件
🤗 总结归纳
java.lang.NoSuchMethodError遇到这个报错基本是版本冲突没得跑,除非是少了依赖 所以需要根据错误分析问题再对症下药,合理使用插件,提高解决问题效率
有关使用上的问题,欢迎您在底部评论区留言,一起交流~
- 作者:chenyou
- 链接:https://blog.chenyou.top/article/bcb4b5d5-4948-4448-9170-e7d941b1dcfa
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章


