解决snakeyaml升级2.0版本启动报错的实践经验总结
然而,改完之后启动项目会出现:java.lang.NoSuchMethodError: org.yaml.snakeyaml.representer.Representer: method ()V not found 的报错。3. 由于 idea 反编译的源码会自动添加上一些强制类型转换和创建一些新的对象,导致报错,根据 idea 的提示删掉或修改即可。1. 在自己项目的 src/main/jav
由于 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包里面的文件重复时,优先加载工程路径下的代码
更多推荐
所有评论(0)