解决snakeyaml升级2.0版本启动报错的实践经验总结

由于 snakeyaml1.x 版本扫描出多个超危和高危漏洞,我们必须更新到 2.0 及以上的版本。然而,改完之后启动项目会出现:java.lang.NoSuchMethodError: org.yaml.snakeyaml.representer.Representer: method <init>()V not found 的报错。

在 CSDN 上阅读了多篇博客之后找到了解决方法,主要的解决方案参考这篇文章:snakeyaml升级2.0版本遇见的坑,解决办法_snakeyaml升级2.0启动报错-CSDN博客

大佬的方案亲测可用,我详细记录一下具体的过程。

1. 在自己项目的 src/main/java 的路径下,建立org.yaml.snakeyaml.representer包,因为只有包路径相同,才可以覆盖 maven 导入的 jar 包中的代码。

2. 在该包路径下,粘贴从 snakeyaml 源码中复制出来的的 Representer类,并且加入无参构造方法

 3. 由于 idea 反编译的源码会自动添加上一些强制类型转换和创建一些新的对象,导致报错,根据 idea 的提示删掉或修改即可。

这种方法的原理可以参考这篇文章:关于jar包和工程src里面class相同的加载优先级问题_重写jar包里的类 优先加载-CSDN博客j

 结论:工程路径下的文件和 jar包里面的文件重复时,优先加载工程路径下的代码

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值