Java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonFactory 错误信息:找不到 com/fasterxml/jackson/core/JsonFactory 类。

95

我正在开发 YouTube 直播 的示例。我创建了一个简单的 Java 项目 并添加了所需的 jar 包,但是在尝试运行该项目时会抛出异常。

异常:

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$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.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

我从这个 GitHub 仓库下载了该项目。


你是用Maven运行它的吗? - Nitek
看起来 pom.xml 文件中缺少 com.fasterxml.jackson.core:jackson-core 依赖。 - Pro
您在运行时错过了一些在编译时使用的jar包。 - Fran Montero
@Nitek 不,我是通过进入项目属性选项并添加jar包来实现的。 - VVB
@NareshK 我没有使用Maven。 - VVB
@FranMontero 不,没有CTE。 - VVB
15个回答

137

在您的pom.xml文件中添加以下依赖项:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.5.2</version>
</dependency>

我没有使用Maven,但我下载了这个jar文件并添加到项目属性中。它有效了。感谢Shruti。已接受并点赞了答案。 - VVB
1
我不知道为什么这个有效。我已经有了2.3.3版本,这就是错误出现的地方,但是将(仅)jackson-core的版本更改为2.5.2就可以了。 - Mindsect Team
我还需要将jackson依赖项升级到更新的版本,但这没有将名称添加到我的清单中,因此除非我手动编辑它,否则仍会抛出ClassNotFoundException。 - Ryan D

44

如果您正在使用SpringBoot,则默认会添加Jackson库,

因此,您手动添加的Jackson版本可能与Spring Boot添加的版本发生冲突

尝试从您的POM文件中删除Jackson库的依赖项,

如果您需要覆盖SpringBoot所添加的版本,则需要先排除它,然后再添加您自己的版本。


1
如何排除? - shareef
在你的gradle.build文件中注释掉这段代码 - 这对我来说似乎起作用了。 - rupweb
哇,不久前我还在跟随Baeldung的教程,显然我不需要添加这个?好吧,那么我浪费了几个小时去寻找适当的版本,结果发现解决方法是删除与Jackson相关的依赖项,真是够烦人的。谢谢。 - iamjoshua
我正在使用Micronaut而不是Spring Boot,这种情况仍然存在。 - Ders
您能说明一下是Spring Boot的哪个模块吗? - Eaton Emmerich
谢谢兄弟,这真的帮了我大忙。 - undefined

19
因为使用了旧版本,我出现了这个错误。 然后我切换到了新版本,错误就不见了。 使用的是Maven。 我的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'


我的版本是2.9.4。将其更改为最新版本2.9.8,错误就像魔术般消失了。 - nanosoft

12

我的问题出在添加了 com.fasterxml.jackson.dataformat 的版本为2.11.0

其他所有的 Jackson 依赖项都是 2.8.0,其中一个是 2.11.0。 将它们全部更改为 2.8.0 后就解决了问题。

请注意,2.11 是最新版本,但由于我的遗留代码,我也将其保留为 2.8。

修复前 [ERROR] : 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>

修复后 [可用] 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>

7

我遇到了同样的错误。 我在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中得到解决。


5

4

问题是由于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'

这给了我一个提示,问题是版本之间的冲突。我不知道spring-boot已经有jackson依赖关系。 - Gi1ber7
感谢Gi1ber7。如果这个答案帮助你解决了问题,请点赞。 :) - Muhammad Tariq

3
通过将依赖项升级到以下版本,解决了这个问题。
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.8</version>
</dependency>

2

从jackson 2.7.4开始(或者可能是更早的版本),该类位于jacskon-jaxrs-base.jar中,该jar包包含在jackson-jaxrs-json-provider中。


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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接