记录解决Maven依赖冲突导致的NoSuchMethodError问题的过程

news/2025/3/14 21:39:53/

摘要

本文记录了解决 Maven 依赖冲突导致的 NoSuchMethodError 问题的过程。问题出现的原因是多个库包含了 Jackson 库,导致 Jackson 序列化与反序列化时出现 NoSuchMethodError 异常。通过查看依赖树,排除冲突库的方法,最终成功解决了该问题。

问题

Redis进行缓存对象时,代码报错,报错的代码如下:
实体类的字段

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;
 redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);

控制台如下:

java.lang.NoSuchMethodError: com.fasterxml.jackson.datatype.jsr310.ser.JSR310FormattedSerializerBase.findFormatOverrides

我拿这个错误问ChatGPT,它的回答如下:

这个错误出现的原因是你正在尝试调用一个在你所使用的库版本中不存在的方法。具体来说,看起来你正在尝试从com.fasterxml.jackson.datatype.jsr310.ser包中的JSR310FormattedSerializerBase类调用findFormatOverrides方法,但是你所使用的库版本中没有这个方法。

这个错误的可能原因之一是你正在使用一个过时的Jackson库版本,该版本不包括这个方法。要修复这个错误,你可以尝试将Jackson库更新到包含findFormatOverrides方法的更近期的版本。

另一个可能性是你的类路径上有多个Jackson库版本,而你的代码使用的版本不包括findFormatOverrides方法。要修复这个错误,你可以尝试从你的类路径中删除旧版本的Jackson库。

如果你正在使用像Maven或Gradle这样的构建工具,你可以检查你的依赖树,看看你正在使用哪个版本的Jackson库,以及哪些其他库依赖于它。这可以帮助你识别不同库之间的任何冲突或兼容性问题。

总的来说,NoSuchMethodError是一个运行时错误,当你尝试调用在你所使用的库版本中不存在的方法时会出现。要修复这个错误,你需要确保你使用了正确的库版本,并且在你的类路径上没有任何冲突或兼容性问题。

解决过程

确定了是Maven依赖冲突的问题,接下来去解决它。

查看依赖树

借助Maven Helper这个插件去排查问题。
在这里插入图片描述打开pom.xml,点击Text右边的依赖分析,搜索jackson查看有哪些库依赖了jackson在这里插入图片描述通过查看各个jackson依赖发现,jackson-databind有两个库存在jackson-databind,分别是spring-boot-starter-actuatorspring-boot-starter-web,我们只需一个即可,需要排除其中的一个,我选择排除actuator。
在这里插入图片描述

排除冲突库

找到actuator依赖所在pom的位置,查看这个库依赖了jackson的哪些东西,我们全都排除
在这里插入图片描述
发现依赖了jackson库的两个东西,因为这个jackson库是重复的,是冲突,需要去做排除

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><exclusions><exclusion><groupId>com.fasterxml.jackson.datatype</groupId><artifactId>jackson-datatype-jsr310</artifactId></exclusion><exclusion><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></exclusion></exclusions></dependency>

结果

解决完冲突之后,启动应用,Redis缓存对象时正常。

"createTime": "2023-03-21 16:58:25"

总结

当开发过程中出现依赖冲突时,可能会导致NoSuchMethodError等运行时异常。下面是一些总结:

1、导致依赖冲突的原因多种多样,比如引入多个版本的同一依赖库、依赖库之间存在版本兼容性问题等等。
2、在遇到NoSuchMethodError等运行时异常时,要仔细分析错误信息,定位到出错的类和方法,找出与之相关的依赖库。
3、查看依赖树是排除依赖冲突的一种有效方法,可以用Maven等工具来查看依赖树,找出冲突的依赖库,并根据需要进行排除或升级。
4、排除依赖冲突可以使用exclusions标签,升级依赖库可以在pom文件中指定新版本号,但要注意兼容性。
5、在解决依赖冲突的过程中,可以将依赖库逐一排除,确定问题出在哪个依赖库,再采取相应的解决措施。
6、对于比较大型的项目,可以使用类似Dependency-Track等工具来监控依赖库的使用情况,及时发现和处理依赖冲突问题。


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

相关文章

查询练习:YEAR 与 NOW 函数

查询 student 表中每个学生的姓名和年龄。 -- 使用函数 YEAR(NOW()) 计算出当前年份&#xff0c;减去出生年份后得出年龄。 SELECT name, YEAR(NOW()) - YEAR(birthday) as age FROM student; ----------------- | name | age | ----------------- | 曾华 | 42 |…

垃圾收集器面试总结(一)

垃圾收集器 Serial 收集器&#xff08;GC日志标识&#xff1a;DefNew&#xff09; Serial&#xff08;串行&#xff09;收集器是最基本、历史最悠久的垃圾收集器了。大家看名字就知道这个收集器是一个单线程收集器了。 它的 “单线程” 的意义不仅仅意味着它只会使用一条垃圾…

Python OpenCV3 计算机视觉秘籍:6~9

原文&#xff1a;OpenCV 3 Computer Vision with Python Cookbook 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 计算机视觉 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 当别人说你没有底线的时候&…

如何使用Socks5代理来保护个人隐私和网络安全

在当今互联网的环境中&#xff0c;我们经常需要通过代理服务器来保护我们的网络安全和隐私。Socks5代理是一种广泛使用的代理协议&#xff0c;它提供了许多安全和隐私保护的功能。在本文中&#xff0c;我们将探讨Socks5代理和网络安全的关系&#xff0c;并介绍如何使用Socks5代…

wps - 使用宏来为每行标记序号

在WPS中遇到需要加序号的虽然可以用项目符符号来标注# 但或许用宏更厉害一些 WPS 的宏是一种自动化工具&#xff0c;可以通过编写宏代码来自动执行一些操作&#xff0c;例如创建和编辑文档、打印、格式化等。 WPS 宏的编写可以使用 VBA&#xff08;Visual Basic for Applicat…

使用全球融合CDN的10大优势

根据预估&#xff0c;今年的全球内容交付网络&#xff08;CDN&#xff09;市场预计将达到424亿美元。而由于移动应用程序的激增和人工智能尤其是ChatGPT等相关领域的快速发展将进一步带来CDN市场的快速增长&#xff0c;可以说全球CDN的黄金时代才刚开始。 融合CDN和多CDN战略是…

39、组合总数

难度&#xff1a;中等 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 …

Git详细教程,彻底理解Git运作机制

Git详细教程 前言git常用命令版本管理远程仓库分支管理 正文git版本管理版本回退工作区和暂存区工作区版本库&#xff08;Repository&#xff09; 撤销修改删除文件 git远程仓库github使用添加远程库小结 从远程库克隆 git分支管理创建和合并分支git merge vs git rebase 解决冲…