我得到以下异常时,试图转换一个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();
}
Sping 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
1条答案
按热度按时间fivyi3re1#
问题可能来自
jackson-dataformat-yaml
(2.15.2)版本和相关的snakeyaml
版本之间的不匹配。如果您使用的是不同的snakeyaml
版本,它可能缺少jackson-dataformat-yaml
所需的某些方法,从而导致NoSuchMethodError
。如何:解决此问题
1.通过允许
jackson-dataformat-yaml
拉取版本来同步版本,而不是硬编码。验证码:
如果您有冲突的依赖项,您可以使用
gradle
中的exclude
功能。刷新Gradle
后,检查依赖项并找到snakeyaml
,看看版本是否匹配。