如何解决snakeyaml NoSuchMethodError:getStyle()

Posted

技术标签:

【中文标题】如何解决snakeyaml NoSuchMethodError:getStyle()【英文标题】:How to resolve snakeyaml NoSuchMethodError: getStyle() 【发布时间】:2018-11-22 21:33:54 【问题描述】:

在我的 Spring Boot 应用程序中,我使用snakeyaml 来解析 YAML 文件。虽然在使用该库时出现以下错误:

java.lang.NoSuchMethodError: org.yaml.snakeyaml.nodes.ScalarNode.getStyle()Ljava/lang/Character;

我正在使用以下 maven 依赖项:

<dependency>
  <groupId>org.yaml</groupId>
  <artifactId>snakeyaml</artifactId>
  <version>1.21</version>
</dependency>

有人有解决此错误的提示吗?

编辑:

解析spring的application.yml时好像出现错误:

server:
  port: 8084

【问题讨论】:

【参考方案1】:

您需要更新到 SnakeYml 1.23,他们修复了 1.20 中引入的不兼容 API 更改。

<dependency>
  <groupId>org.yaml</groupId>
  <artifactId>snakeyaml</artifactId>
  <version>1.23</version>
</dependency>

【讨论】:

【参考方案2】:

那是由于this change:

重构 ScalarNode - 使用枚举 ScalarStyle 而不是 Character

您可以回滚到 SnakeYaml 1.19,这是此更改之前的最后一个版本,或者等待Spring Boot to support SnakeYaml 1.20+。

【讨论】:

版本 1.19 在 jdk 9 上导致“非法反射访问” @cybersoft 请参阅this issue。已在 1.20 中修复,太糟糕了。 是的,我知道,但我使用 Spring Boot 2 和 it does not work yet 和 snakeyaml 1.20+ 是的,这就是重点。我只是想为遇到此问题的其他人添加上下文。除了使用较旧的 jdk 之外,我不知道任何解决方案。 谢谢@flyx。我将我的更改为最新版本的snakeyml,它解决了这个问题。

以上是关于如何解决snakeyaml NoSuchMethodError:getStyle()的主要内容,如果未能解决你的问题,请参考以下文章

SnakeYAML:解析时如何禁用下划线剥离?

如何更改snakeyaml中的隐式类型(int to double)

如何使用 snakeYaml 库访问 YAML 文件中的内部(嵌套)键值

如何在 SnakeYaml 中解析 YAML 文件的一部分

使用 SnakeYAML 的嵌套构造

在 OSGi 下使用 SnakeYaml?