由于 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包里面的文件重复时,优先加载工程路径下的代码

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐