java.lang.NoClassDefFoundError:com/fasterxml/jackson/core/JsonFactory

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

我正在研究

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$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 存储库下载了该项目。

java jar noclassdeffounderror live-streaming youtube-data-api
16个回答
137
投票

将以下依赖项添加到您的

pom.xml

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

44
投票

如果你使用的是 springboot 那么 jackson 是默认添加的,

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

尝试从 pom 中删除 Jackson 依赖项,

如果您需要覆盖 Spring Boot 添加的版本,那么您需要先排除它,然后添加您自己的


20
投票

由于旧版本,我收到此错误。 然后我改成这个版本n错误消失了 使用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”


12
投票

就我而言,问题是当我添加 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>

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
投票

请求的 jar 可能不是 jackson-annotations-x.y.z.jar 而是 jackson-core-x.y.z.jar,可以在这里找到: http://www.java2s.com/Code/Jar/j/Downloadjacksoncore220rc1jar.htm


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'

3
投票

通过将依赖升级到以下版本解决了问题

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

2
投票

你必须添加一罐:

jackson-annotations-2.1.2.jar
您可以从here下载它并将其添加到类路径中 如果您使用 gradle,请添加以下依赖项。

compile 'com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.5.2'

2
投票

从 jackson 2.7.4(或更早版本)开始,该类位于 jacskon-jaxrs-base.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>

2
投票

我重现了这个问题,例如:

java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/util/JacksonFeature

依赖版本:

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

和:

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

为了解决这个问题,我使用了:

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

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

1
投票

我遇到了同样的问题,这是由于项目中存在冲突的 Jackson 版本而发生的。

因此,我在 pom.xml 中为所有 Jackson 依赖项明确定义了相同的版本。发布这篇文章时,我在运行 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

1
投票

大多数时候是 Jackson 版本不兼容。升级jackson版本就可以了。


1
投票

我在我的项目 Java 17 上遇到了同样的问题,我使用了依赖项。

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

注意jackson的版本是spring boot自动添加的,你 真的不需要手动添加它。

我已将其从 pom.xml 中删除


0
投票

就我而言,添加这两个依赖项没有帮助:

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

除了这些之外,我还必须添加以下内容,然后它就起作用了:

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.4</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>foo.bar.Main</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
© www.soinside.com 2019 - 2024. All rights reserved.