You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jackson YAML解析器与SnakeYAML兼容问题:NoSuchMethodError异常

解决Jackson YAML转换时的NoSuchMethodError异常(SnakeYAML兼容问题)

问题场景

将YAML字符串转换为自定义类时抛出如下异常:

java.lang.NoSuchMethodError: 'void org.yaml.snakeyaml.parser.ParserImpl.<init>(org.yaml.snakeyaml.reader.StreamReader, org.yaml.snakeyaml.LoaderOptions)'
    at com.fasterxml.jackson.dataformat.yaml.YAMLParser.<init>(YAMLParser.java:204)

执行代码:

try {
     MyClass claseIns = mapper.readValue(string, MyClass.class);
     MyClass.add(claseIns);
} catch (JsonProcessingException e) {
     e.printStackTrace();
}

使用Spring Boot 2.7.13,Gradle配置如下:

buildscript {
    dependencies {
        classpath 'org.yaml:snakeyaml:2.0'
    }
}

dependencies {
    implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.15.2'
}

已确认Jackson 2.15.2标注兼容SnakeYAML 2.0,但异常仍触发。

原因分析

Spring Boot 2.7.x的依赖管理体系默认绑定的SnakeYAML版本为1.30,你在buildscript中指定的SnakeYAML 2.0仅作用于构建脚本的classpath,项目运行时的classpath依然使用Spring Boot默认的低版本SnakeYAML。而Jackson YAML 2.15.2调用了低版本SnakeYAML中不存在的ParserImpl构造方法,最终引发NoSuchMethodError。

解决方案

方案1:通过Spring Boot依赖管理统一指定版本

借助Spring Boot的dependency-management插件覆盖默认版本,确保运行时使用SnakeYAML 2.0:

plugins {
    id 'org.springframework.boot' version '2.7.13'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
    // 其他项目插件
}

dependencyManagement {
    dependencies {
        dependency 'org.yaml:snakeyaml:2.0'
    }
}

dependencies {
    implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.15.2'
    // 其他项目依赖
}

方案2:直接添加implementation级别的SnakeYAML依赖

移除buildscript中的SnakeYAML配置,直接在运行时依赖中指定版本,强制覆盖默认值:

dependencies {
    implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.15.2'
    implementation 'org.yaml:snakeyaml:2.0'
    // 其他项目依赖
}

方案3:验证依赖树并排除冲突

执行以下命令查看运行时依赖树,确认SnakeYAML的实际生效版本:

./gradlew dependencies --configuration runtimeClasspath | grep snakeyaml

若输出中存在1.30版本,说明有其他依赖引入了低版本SnakeYAML,通过exclude规则排除:

implementation('冲突依赖的groupId:artifactId:版本') {
    exclude group: 'org.yaml', module: 'snakeyaml'
}

内容的提问来源于stack exchange,提问作者Liron Tal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 00:37:29