运行基于 Spark 的 Spring Boot 应用程序时获取 java.lang.NoSuchMethodError: org.yaml.snakeyaml.Yaml.<init>

IAm*_*ere 12 snakeyaml spring-boot apache-spark

SnakeYaml jar 存在于 classPath:snakeyaml-1.26.jar

2330 [main] ERROR org.springframework.boot.SpringApplication  - Application run failed
java.lang.NoSuchMethodError: org.yaml.snakeyaml.Yaml.<init>(Lorg/yaml/snakeyaml/constructor/BaseConstructor;Lorg/yaml/snakeyaml/representer/Representer;Lorg/yaml/snakeyaml/DumperOptions;Lorg/yaml/snakeyaml/LoaderOptions;Lorg/yaml/snakeyaml/resolver/Resolver;)V
    at org.springframework.boot.env.OriginTrackedYamlLoader.createYaml(OriginTrackedYamlLoader.java:71)
    at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:162)
    at org.springframework.boot.env.OriginTrackedYamlLoader.load(OriginTrackedYamlLoader.java:76)
    at org.springframework.boot.env.YamlPropertySourceLoader.load(YamlPropertySourceLoader.java:50)
    at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.loadDocuments(ConfigFileApplicationListener.java:607)
Run Code Online (Sandbox Code Playgroud)

Ale*_*der 5

我遇到了类似的问题,我的解决方案是使用与 Spring Boot 完全相同的版本的Snakeyaml 。

一般来说,一个好的技巧是导入 Maven 依赖项org.springframework.boot:spring-boot-dependencies以避免版本不兼容。

如果您使用的是mvn,请将其添加<dependencyManagement>到您的 pom 中:

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>${spring.boot.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
Run Code Online (Sandbox Code Playgroud)

然后是下面的<dependencies>:

    <dependency>
      <groupId>org.yaml</groupId>
      <artifactId>snakeyaml</artifactId>
      <scope>runtime</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

例如 spring-boot-dependency-2.3.6.RELEASE.pom 在1.26中使用snakeyaml:

 <snakeyaml.version>1.26</snakeyaml.version>
Run Code Online (Sandbox Code Playgroud)

而 spring-boot-dependency-2.5.12.pom 使用 1.28:

 <snakeyaml.version>1.28</snakeyaml.version>
Run Code Online (Sandbox Code Playgroud)

spring-boot-dependency-2.6.1.pom 使用 1.29:

 <snakeyaml.version>1.29</snakeyaml.version>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。