小工具知识网

当前位置: 首页 > 行业知识 > snakeyaml1.x升级2.x导致项目启动报错

行业知识

snakeyaml1.x升级2.x导致项目启动报错

2026-10-20 19:27:52 来源:互联网转载

snakeyaml1.x升级2.x,修复漏洞

1.背景

在工作��,经常会有漏洞扫描,有一次看到了snakeyaml的漏洞:

项目框架:springBoot

版本:2.2.6.RELEASE

snakeyaml 中央仓库信息

snakeyaml中央仓库地址:https://mvnrepository.com/artifact/org.yaml/snakeyaml

目前中央仓库显示,1.x版本全有漏洞警告,可用版本只有2.x

3.修复漏洞:

修复方式如下: (此方法仅限springBoot 2.7.10及以上版本使用)

            com.baomidoumybatis-plus-boot-starter${mybatis-plus.version}org.yamlsnakeyamlorg.yamlsnakeyaml2.0

如果你的SpringBootStarter版本在2.7.10以下,请继续看完下面内容

2.7.10版本以下的项目,仅做此排除和重新引入2.x依赖操作,那么项目会启动失败,你会得到以下两种启动报错:

报错一:

java.lang.NoSuchMethodError: org.yaml.snakeyaml.constructor.Constructor: method ()V not found

报错二:

java.lang.NoSuchMethodError: org.yaml.snakeyaml.representer.Representer: method ()V not found
4.启动报错的原因:

snakeyaml 2.x版本去掉了Constructor和Representer两个类中的无参构造,但springBootStarter2.7.10以下版本会加载这个无参构造,所以项目启动会失败

5.解决办法:

1.升级springboot-starter至2.7.10及以上 (springBoot版本升级,考虑整个项目的影响,慎重)

2.重写这两个类,加上无参构造(本文解决方案)

原理:Java父子加载器,覆盖maven依赖jar包中的类。

若idea无法下载源码,参考以下github地址

snakeyaml源码gitHub参考地址:

https://github.com/snakeyaml/snakeyaml/blob/master/src/main/java/org/yaml/snakeyaml/representer/Representer.java

1.在src目录下按这两个类的路径建包,复制这两个类源代码,增加无参构造

做完此重写操作,即可修复升级2.x后不能启动的问题。

ps: 查看maven 依赖树结构命令

在idea命令窗口,执行: mvn dependency:tree

本文绑定附件:org.zip 。直接将org.zip解压,放在src目录下即可

上一篇:五子棋在线畅玩,轻松上手,体验网页对决的乐趣!

下一篇:Win10管理员权限深度解析,掌握管理大权,轻松驾驭系统!