当前位置: 首页 > article >正文

maven项目运行时NoSuchMethodError问题排查记录(依赖冲突解决)

控制台异常如下:

Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: 
org.apache.commons.io.input.BoundedInputStream.builder()Lorg/apache/commons/io/input/BoundedInputStream$Builder;

问题明显,根据NoSuchMethodError可以看出是没有指定方法错误,有以下几种情况:

  1. maven 依赖版本冲突,导致其他依赖调用另一个依赖时没有指定方法;
  2. 通过反射来获取 class 方法时,类中没有指定方法。

以上两种情况属于常见情况,另外,如果自己写的代码调用依赖方法没有指定方法时,编译就会报错,这种情况忽略。

通过反射没有获取到指定方法这个问题应该比较好排查,只要根据控制台打印的异常位置,就可以定位到问题所在,然后直接修改问题代码

但是对于依赖冲突来说,稍微比较麻烦一些。下面提供排查方法。

异常原因:不同依赖可能会使用相同的依赖,如依赖A和依赖B中都使用了依赖C,但是开发者使用的依赖C版本可能会不一样,项目运行时只会使用一个版本的依赖(这里会有依赖优先选择性,具体可以自己去找),如A中的C有getName方法,但是B中的C没有,但是项目运行时使用的是B中的C,那么A调用C没有getName方法,然后就会报NoSuchMethodError。

  1. 首先,你需要分析控制台异常。根据上面异常得出:org.apache.commons.io.input 下的 BoundedInputStream 类没有 builder 方法;
  2. 然后通过 maven helper 工具(idea插件)查看 pom 依赖冲突,看到是否有 org.apache.commons.io 的依赖冲突;
  3. 可以点击 exclude 排除依赖,也可以自己定位依赖版本问题

打开 pom.xml,如果安装了 maven helper 左下角应该会有 dependency analyzer 标签,点击即可看到
在这里插入图片描述
左边是冲突的依赖,右边是冲突依赖来源,右键依赖来源可以选择跳转依赖树、跳转到资源依赖、排除依赖
在这里插入图片描述
通过跳转依赖树我们就会得知冲突依赖所在模块及所属依赖,然后可以根据需求排除依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>${easyexcel.verion}</version>
    <exclusions>
        <exclusion>
            <artifactId>poi-ooxml-schemas</artifactId>
            <groupId>org.apache.poi</groupId>
        </exclusion>
    </exclusions>
</dependency>

http://www.kler.cn/a/445230.html

相关文章:

  • 二八(vue2-04)、scoped、data函数、父子通信、props校验、非父子通信(EventBus、provideinject)、v-model进阶
  • 我的性能优化经验
  • C# winform 字符串通过枚举类型转成int类型的数据
  • 网站灰度发布?Tomcat的8005、8009、8080三个端口的作用什么是CDNLVS、Nginx和Haproxy的优缺点服务器无法开机时
  • 模具生产过程中的标签使用流程图
  • 【Prometheus 】【实战篇(五)】深入解析 Prometheus 监控指标类型:Counter、Gauge、Histogram 和 Summary
  • 使用yolo v5 识别月球极小撞击坑
  • 卫星综合电子软件系统
  • docling:PDF解析
  • DALL-M:基于大语言模型的上下文感知临床数据增强方法 ,补充
  • Ansible基本用法
  • 14:00面试,14:10就出来了,问的问题过于变态了。。。
  • Visio——导出的PDF文件缺乏嵌入字体的解决办法 / 设置导出的PDF文件添加嵌入字体的方法
  • 【HTML+CSS】深入理解HTML中的<div>标签:布局与样式的基石
  • verge下最节省gas的智能合约写法
  • 师生交流系统|Java|SSM|JSP|
  • OnOn-WebSsh (昂~昂~轻量级WebSSH) 可实现 网页 中的 ssh 客户端操作,支持多用户多线程操作 ssh 持久化
  • 【漫话机器学习系列】011.Bagging方法 VS Dropout方法
  • 【Harmony Next】多个图文配合解释DevEco Studio工程中,如何配置App相关内容,一次解决多个问题?
  • JSP企业快信系统的设计与实现【源码+文档】
  • Android 音视频编解码器 MediaCodec
  • SparkSQL案例
  • SQL或ORM获取随机一行数据
  • 深度学习网络训练及部署环节相关工具
  • Flamingo论文介绍:把视觉特征向语言模型看齐
  • R 语言科研绘图第 6 期 --- 散点图-基础