java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonFactory
java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonFactory
我正在处理 YouTube broadcast
个示例。我创建了一个示例 Java Project
并添加了所需的罐子。但是,当我尝试 运行 项目时它抛出异常。
异常:
Throwable: com/fasterxml/jackson/core/JsonFactory
java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonFactory
at com.google.api.client.json.jackson2.JacksonFactory.<init>(JacksonFactory.java:44)
at com.google.api.services.samples.youtube.cmdline.live.Auth.<clinit>(Auth.java:35)
at com.google.api.services.samples.youtube.cmdline.live.CreateBroadcast.main(CreateBroadcast.java:55)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.core.JsonFactory
at java.net.URLClassLoader.run(URLClassLoader.java:366)
at java.net.URLClassLoader.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 3 more
我从 this GitHub repository 下载了该项目。
您必须添加一个罐子:jackson-annotations-2.1.2.jar
您可以从 here 下载它并将其添加到 class 路径
如果您使用的是 gradle 然后添加以下依赖项。
compile 'com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.5.2'
将以下依赖项添加到您的 pom.xml
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.2</version>
</dependency>
请求的jar可能不是jackson-annotations-x.y.z.jar而是jackson-core-x.y.z.jar可以在这里找到:
http://www.java2s.com/Code/Jar/j/Downloadjacksoncore220rc1jar.htm
从 jackson 2.7.4(或更早版本)开始,class 在 jackson-jaxrs-base.jar 中,它包含在 jackson-jaxrs-json-provider
中
因为旧版本,我得到了这个错误。
然后我改成这个版本 n 错误消失了
使用行家
我的 pom.xml
<properties>
...
<jackson.version>2.5.2</jackson.version>
</properties>
<dependencies>
...
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
</dependencies>
我的旧版本是“2.2.3”
通过将依赖升级到以下版本解决了问题
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
在我的例子中,问题是当我添加 com.fasterxml.jackson.dataformat
我把版本 2.11.0.
虽然所有其他 Jackson 依赖项都是 2.8.0,其中之一是 2.11.0 并且全部更改为 2.8.0修好了。
仅供参考,2.11 是最新的,但由于我的遗留代码,我也将其保留为 2.8。
修复 [错误] 之前:com.fasterxml.jackson.dataformat
版本是 2.11.0
:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.0</version>
</dependency>
修复后 [WORKED] com.fasterxml.jackson.dataformat
版本为 2.8.0
:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.0</version>
</dependency>
如果您使用的是 springboot 则默认添加 jackson,
因此您手动添加的 jackson 版本可能 与 spring 引导添加的
冲突
尝试从您的 pom 中删除 jackson 依赖项,
如果你需要覆盖版本spring引导添加,那么你需要先排除然后添加你自己的
我也遇到过同样的错误。
我添加了对 pom.xml 的依赖(我正在使用 Maven)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.1</version>
</dependency>
我开始尝试使用 2.9.0 版,然后我发现了一个不同的错误 (com/fasterxml/jackson/core/exc/InputCoercionException)
然后我尝试不同的版本,直到所有错误都用版本 2.12.1
解决
我遇到了同样的问题,这是由于项目中存在冲突的 Jackson 版本。
所以我在 pom.xml 中为所有 Jackson 依赖项明确定义了相同的版本。 Post 这个我在 运行 jar 的时候没有遇到这个错误,已经妥善解决了。
下面是我用的:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.12.0</version>
</dependency>
Maven 依赖树版本冲突
(base) rohiagra-mac:test-secret rohiagra$ mvn dependency:tree|grep jackson
[INFO] | +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.7.9:compile
[INFO] | | +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.7.9:compile
[INFO] | | \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.7.9:compile
[INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.12.0:compile
[INFO] | | \- com.fasterxml.jackson.core:jackson-core:jar:2.12.0:compile
[INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.12.0:compile
[INFO] | +- org.glassfish.jersey.media:jersey-media-json-jackson:jar:2.32:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.9:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.9.9:compile
已解决冲突的 Maven 依赖关系树
[INFO] | +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.7.9:compile
[INFO] | | +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.7.9:compile
[INFO] | | \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.7.9:compile
[INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.12.0:compile
[INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.12.0:compile
[INFO] | +- org.glassfish.jersey.media:jersey-media-json-jackson:jar:2.32:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.9:compile
[INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.12.0:compile
[INFO] | \- com.fasterxml.jackson.core:jackson-core:jar:2.12.0:compile
多半是Jackson版本不兼容。升级jackson版本应该可以了
问题是 Jackson-databind
的版本冲突。我的 spring-boot 版本是 2.5.8
,spring-boot 使用的是 jackson-core
版本 2.12.6。
我的明确实施是使用 jackson-core
版本 2.13.2,这就是问题的原因。
我注释掉了 gradle.build
中的以下行,这解决了问题。
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.13.2'
我通过简单地删除版本标签解决了这个问题,如下所示:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
我的项目遇到了同样的问题Java 17,我使用了依赖。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.1</version>
</dependency>
注意jackson的版本是spring开机自动添加的,你
真的不需要手动添加。
我已将其从 pom.xml
中删除
我正在处理 YouTube broadcast
个示例。我创建了一个示例 Java Project
并添加了所需的罐子。但是,当我尝试 运行 项目时它抛出异常。
异常:
Throwable: com/fasterxml/jackson/core/JsonFactory
java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonFactory
at com.google.api.client.json.jackson2.JacksonFactory.<init>(JacksonFactory.java:44)
at com.google.api.services.samples.youtube.cmdline.live.Auth.<clinit>(Auth.java:35)
at com.google.api.services.samples.youtube.cmdline.live.CreateBroadcast.main(CreateBroadcast.java:55)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.core.JsonFactory
at java.net.URLClassLoader.run(URLClassLoader.java:366)
at java.net.URLClassLoader.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 3 more
我从 this GitHub repository 下载了该项目。
您必须添加一个罐子:jackson-annotations-2.1.2.jar
您可以从 here 下载它并将其添加到 class 路径
如果您使用的是 gradle 然后添加以下依赖项。
compile 'com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.5.2'
将以下依赖项添加到您的 pom.xml
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.2</version>
</dependency>
请求的jar可能不是jackson-annotations-x.y.z.jar而是jackson-core-x.y.z.jar可以在这里找到: http://www.java2s.com/Code/Jar/j/Downloadjacksoncore220rc1jar.htm
从 jackson 2.7.4(或更早版本)开始,class 在 jackson-jaxrs-base.jar 中,它包含在 jackson-jaxrs-json-provider
中因为旧版本,我得到了这个错误。 然后我改成这个版本 n 错误消失了 使用行家 我的 pom.xml
<properties>
...
<jackson.version>2.5.2</jackson.version>
</properties>
<dependencies>
...
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
</dependencies>
我的旧版本是“2.2.3”
通过将依赖升级到以下版本解决了问题
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
在我的例子中,问题是当我添加 com.fasterxml.jackson.dataformat 我把版本 2.11.0.
虽然所有其他 Jackson 依赖项都是 2.8.0,其中之一是 2.11.0 并且全部更改为 2.8.0修好了。
仅供参考,2.11 是最新的,但由于我的遗留代码,我也将其保留为 2.8。
修复 [错误] 之前:com.fasterxml.jackson.dataformat
版本是 2.11.0
:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.0</version>
</dependency>
修复后 [WORKED] com.fasterxml.jackson.dataformat
版本为 2.8.0
:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.0</version>
</dependency>
如果您使用的是 springboot 则默认添加 jackson,
因此您手动添加的 jackson 版本可能 与 spring 引导添加的
冲突尝试从您的 pom 中删除 jackson 依赖项,
如果你需要覆盖版本spring引导添加,那么你需要先排除然后添加你自己的
我也遇到过同样的错误。 我添加了对 pom.xml 的依赖(我正在使用 Maven)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.1</version>
</dependency>
我开始尝试使用 2.9.0 版,然后我发现了一个不同的错误 (com/fasterxml/jackson/core/exc/InputCoercionException) 然后我尝试不同的版本,直到所有错误都用版本 2.12.1
解决我遇到了同样的问题,这是由于项目中存在冲突的 Jackson 版本。
所以我在 pom.xml 中为所有 Jackson 依赖项明确定义了相同的版本。 Post 这个我在 运行 jar 的时候没有遇到这个错误,已经妥善解决了。
下面是我用的:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.12.0</version>
</dependency>
Maven 依赖树版本冲突
(base) rohiagra-mac:test-secret rohiagra$ mvn dependency:tree|grep jackson
[INFO] | +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.7.9:compile
[INFO] | | +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.7.9:compile
[INFO] | | \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.7.9:compile
[INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.12.0:compile
[INFO] | | \- com.fasterxml.jackson.core:jackson-core:jar:2.12.0:compile
[INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.12.0:compile
[INFO] | +- org.glassfish.jersey.media:jersey-media-json-jackson:jar:2.32:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.9:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.9.9:compile
已解决冲突的 Maven 依赖关系树
[INFO] | +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.7.9:compile
[INFO] | | +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.7.9:compile
[INFO] | | \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.7.9:compile
[INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.12.0:compile
[INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.12.0:compile
[INFO] | +- org.glassfish.jersey.media:jersey-media-json-jackson:jar:2.32:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.9:compile
[INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.12.0:compile
[INFO] | \- com.fasterxml.jackson.core:jackson-core:jar:2.12.0:compile
多半是Jackson版本不兼容。升级jackson版本应该可以了
问题是 Jackson-databind
的版本冲突。我的 spring-boot 版本是 2.5.8
,spring-boot 使用的是 jackson-core
版本 2.12.6。
我的明确实施是使用 jackson-core
版本 2.13.2,这就是问题的原因。
我注释掉了 gradle.build
中的以下行,这解决了问题。
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.13.2'
我通过简单地删除版本标签解决了这个问题,如下所示:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
我的项目遇到了同样的问题Java 17,我使用了依赖。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.1</version>
</dependency>
注意jackson的版本是spring开机自动添加的,你 真的不需要手动添加。
我已将其从 pom.xml
中删除