对象映射器 - YAMLFactory - 由于缺少 _createContentReference 方法而导致异常

问题描述 投票:0回答:4

我正在使用最新的 2.13.0 版本的 jackson,当我尝试解析 YAML 文件时,出现此异常

 java.lang.NoSuchMethodError: 'com.fasterxml.jackson.core.io.ContentReference com.fasterxml.jackson.dataformat.yaml.YAMLFactory._createContentReference(java.lang.Object)'

可能是什么问题?

我包含的依赖项是 jackson-core、jackson-databind 和 jackson-dataformat-yaml - 均为 2.13.0

java jackson jackson-databind jackson-dataformat-yaml
4个回答
14
投票

No such method error
在大多数情况下意味着您有2个相同但版本不同的依赖项,但是应用程序正在加载其中没有此方法的版本,

对此

_createContentReference
的引用存在于
YAMLFactory
中的
jackson-dataformat-yaml.jar

实际的

_createContentReference
实现存在于
com.fasterxml.jackson.core.JsonFactory
中,存在
jackson-core.2.13.0.

就您而言,您可能有另一个

jackson-core.jar
,其中旧版本作为间接依赖项的一部分。

您可以看到

mvn dependency:tree
或您的IDE(例如Eclipse允许您按名称搜索依赖项,它会返回所有匹配的内容,包括它们的版本)


3
投票

谢谢。 它帮助我从 quarkus-smallrye-openapi 中排除 jackson-dataformat-yaml 版本 2.13.1 并包含 2.12.3 。像这样:

    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-smallrye-openapi</artifactId>
        <exclusions>
            <exclusion>
                <groupId>com.fasterxml.jackson.dataformat</groupId>
                <artifactId>jackson-dataformat-yaml</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-yaml</artifactId>
        <version>2.12.3</version>
    </dependency>

0
投票

我也面临同样的问题。我的环境是—— Wildfly 版本 - 26.1.1-最终版 春季启动 - 2.7.8

问题的出现是因为 Wildfly 已将相同版本的 API 添加为模块,并且同一组 jackson* 系列 jar 正在通过 Spring Boot,因此在运行时会产生问题。

解决方案 - spring-boot pom.xml 下的所有 jackson* jar 添加到排除列表中,并分别添加提供范围的依赖项。我修改后的pom.xml如下-

<properties>
    <spring.boot.version>2.7.8</spring.boot.version>
    <jackson.version>2.13.4</jackson.version>       
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-to-slf4j</artifactId>
            </exclusion>

            <exclusion>
                <artifactId>jackson-databind</artifactId>
                <groupId>com.fasterxml.jackson.core</groupId>
            </exclusion>
           <!-- Exclusion list -->
            <exclusion>
                <artifactId>jackson-datatype-jdk8</artifactId>
                <groupId>com.fasterxml.jackson.datatype</groupId>
            </exclusion>
            <exclusion>
                <artifactId>jackson-datatype-jsr310</artifactId>
                <groupId>com.fasterxml.jackson.datatype</groupId>
            </exclusion>
            <exclusion>
                <artifactId>jackson-core</artifactId>
                <groupId>com.fasterxml.jackson.core</groupId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- added dependency with provided scope -->
    <dependency>
        <artifactId>jackson-databind</artifactId>
        <groupId>com.fasterxml.jackson.core</groupId>
        <version>${jackson.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <artifactId>jackson-datatype-jdk8</artifactId>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <version>${jackson.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <artifactId>jackson-datatype-jsr310</artifactId>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <version>${jackson.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <artifactId>jackson-core</artifactId>
        <groupId>com.fasterxml.jackson.core</groupId>
        <version>${jackson.version}</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

0
投票

在 spring boot 3、gradle 和 org.openapi.generator 插件 7.3.0 中遇到了同样的问题。问题是由 openapi 插件出于任何原因使用旧版本的 jackson-core (2.12.x) 引起的,尽管它的 pom 说 jackson-core 2.15.3 并且我的项目肯定使用相同的版本。

以下条目(在根 build.gradle 中)强制插件使用较新的版本并为我工作:

buildscript {
  dependencies {
    classpath 'com.fasterxml.jackson.core:jackson-core:2.15.3'
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.