使用SBT运行Play应用时出现snakeyaml相关NoSuchMethodError异常
问题原因
snakeyaml 2.0做了破坏性API变更,org.yaml.snakeyaml.constructor.SafeConstructor的无参构造方法被移除,替代为需要传入LoaderOptions参数的构造方法。但你的项目依赖的swagger-v3-parser或atlassian-oai-validator库仍在调用这个已被移除的无参构造方法,导致运行时抛出NoSuchMethodError。
解决方案
- 回退snakeyaml版本:暂时降级到与依赖库兼容的版本(如1.33),在SBT中配置:
// 直接指定兼容版本 libraryDependencies += "org.yaml" % "snakeyaml" % "1.33" // 或者强制统一版本,避免依赖冲突 dependencyOverrides += "org.yaml" % "snakeyaml" % "1.33" - 升级依赖库版本:检查并升级
swagger-v3-parser和atlassian-oai-validator到适配snakeyaml 2.0的版本。例如swagger-parser 2.1.16及后续版本已修复该兼容性问题,atlassian-oai-validator也有对应更新版本,直接在SBT中更新这些依赖的版本即可。 - 排除冲突依赖(不推荐优先使用):如果暂时无法升级依赖库,可在引入有问题的库时排除旧的snakeyaml依赖,但仅当依赖库能兼容新版本时有效:
libraryDependencies += "io.swagger.parser.v3" % "swagger-parser" % "你的当前版本" exclude("org.yaml", "snakeyaml")
内容的提问来源于stack exchange,提问作者sahil arya
相关产品推荐
相关产品推荐

