NoMethodFoundException - Jackson yaml 解析器和 snakeYAML

NoMethodFoundException - Jackson yaml parser & snakeYAML

提问人:Liron Tal 提问时间:8/28/2023 最后编辑:Liron Tal 更新时间:8/28/2023 访问量:188

问:

尝试将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

build.gradle 包括:

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

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

从网上搜索来看,这似乎是 jackson 和 snakeYAML 之间的版本问题,但正如你在这里看到的,它说 jackson 2.15.2 与 snakeYAML 2.0 兼容: https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/2.15.2

Java Spring-Boot Jackson Snakeyaml

评论


答:

1赞 AztecCodes 8/28/2023 #1

该问题可能来自版本 (2.15.2) 与关联版本之间的不匹配。如果您使用的是其他版本,则它可能缺少 所需的某些方法,从而导致 .jackson-dataformat-yamlsnakeyamlsnakeyamljackson-dataformat-yamlNoSuchMethodError

如何:解决此问题

  1. 通过允许拉取版本来同步版本,并且不对其进行硬编码。
    守则:
    jackson-dataformat-yaml
 dependencies {
    implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.15.2'
    // Do not specify snakeyaml version here, let jackson-dataformat-yaml pull the appropriate version
  }

如果存在冲突的依赖关系,则可以使用 中的功能。刷新后,检查依赖项并找到并查看版本是否匹配。excludegradleGradlesnakeyaml

评论

0赞 Liron Tal 8/28/2023
那么我应该从 buildScript 中删除 x 类路径'org.yaml:snakeyaml:2.0'吗?我仍然不确定我应该在我的配置中更改什么
0赞 AztecCodes 8/28/2023
@LironTal 试试看。
0赞 Liron Tal 8/28/2023
仍然收到相同的错误:(