java 对象Map器- YAMLFactory -由于缺少_createContentReference方法而出现异常

eqfvzcg8  于 2023-02-07  发布在  Java
关注(0)|答案(3)|浏览(229)

我使用的是jackson的最新2.13.0版本,当我尝试解析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

42fyovps

42fyovps1#

No such method error在大多数情况下意味着您有两个相同的依赖项,但版本不同,但是应用程序正在加载的版本中没有此方法,
对此_createContentReference的引用存在于jackson-dataformat-yaml.jarYAMLFactory
实际的_createContentReference实现存在于com.fasterxml.jackson.core.JsonFactory中,而com.fasterxml.jackson.core.JsonFactory存在于jackson-core.2.13.0.
在您的情况下,您可能有另一个旧版本的jackson-core.jar作为间接依赖关系的一部分。
您可以看到mvn dependency:tree或您的IDE(例如Eclipse允许您按名称搜索依赖项,并返回所有匹配项,包括它们的版本)

wixjitnu

wixjitnu2#

谢谢,它帮助我从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>
bxgwgixi

bxgwgixi3#

我也面临同样的问题。我的环境是- Wildfly版本-26. 1. 1-最终Spring Boot -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>

相关问题