我正在使用最新的 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
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允许您按名称搜索依赖项,它会返回所有匹配的内容,包括它们的版本)
谢谢。 它帮助我从 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>
我也面临同样的问题。我的环境是—— 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>
在 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'
}
}