【问题标题】:java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonFactoryjava.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonFactory
【发布时间】:2015-08-02 17:25:37
【问题描述】:

我正在处理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

我从this GitHub repository 下载了该项目。

【问题讨论】:

  • 你是用 maven 运行的吗?
  • 看起来 com.fasterxml.jackson.core:jackson-core 依赖项在 pom.xml 中缺失
  • 您在运行时错过了一些在编译时使用的 jar。
  • @Nitek 不,我通过转到项目属性选项添加了 jar
  • @NareshK 我没有使用 Maven

标签: java jar noclassdeffounderror live-streaming youtube-data-api


【解决方案1】:

大部分时间是 Jackson 版本不兼容。升级jackson版本应该可以了。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,这是由于项目中存在的 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
    

    【讨论】:

    • 这解决了我的问题。
    【解决方案3】:

    我也遇到了同样的错误。 我添加了对 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 版本解决了所有错误

    【讨论】:

      【解决方案4】:

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

      因此,您手动添加的 jackson 版本可能与添加的一个 spring boot 冲突

      尝试从你的 pom 中删除 jackson 依赖项,

      如果需要覆盖spring boots add的版本,则需要先排除再添加自己的

      【讨论】:

      • 如何排除?
      • 从你的 gradle.build 中评论 - 这似乎对我有用
      • 哇,我不久前正在学习一个 baeldung 教程,显然我不需要添加这个?,哦,好吧,浪费时间试图找到合适的版本来添加只是为了找出解决方法是删除杰克逊相关的依赖项,ugggh。谢谢。
      【解决方案5】:

      在我的情况下,问题是当我添加 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 version is 2.11.0    
      
      com.fasterxml.jackson.dataformat 杰克逊-数据格式-xml 2.11.0
      <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

      com.fasterxml.jackson.dataformat 杰克逊-数据格式-xml 2.8.0
      <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>
      

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

          【解决方案7】:

          由于旧版本,我收到此错误。 然后我改成这个版本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'

          【讨论】:

          • 我的版本是 2.9.4。将其更改为最新版本 2.9.8,错误就消失了。
          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

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

            【讨论】:

              【解决方案10】:

              将以下依赖项添加到您的pom.xml

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

              【讨论】:

              • 我没有使用 Maven,但我下载了这个 jar 并添加到项目属性中。有效。谢谢思鲁提。接受+赞成的答案
              • 我不知道为什么会这样。我已经有 2.3.3 版本,这是错误到达的地方,但是将(仅)jackson-core 的版本更改为 2.5.2。工作。
              • 我还需要将 jackson 依赖项升级到较新的版本,但这并没有将名称添加到我的 Manifest 中,因此在我手动编辑之前仍然会抛出 ClassNotFoundException。
              【解决方案11】:

              你必须添加一个罐子:jackson-annotations-2.1.2.jar 您可以从here 下载它并将其添加到类路径中 如果您使用的是 gradle,请添加以下依赖项。

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

              【讨论】:

                猜你喜欢
                • 2021-10-08
                • 2020-09-22
                • 2020-11-24
                • 2018-04-26
                • 2021-11-10
                • 1970-01-01
                • 2017-12-17
                • 2022-09-20
                • 1970-01-01
                相关资源
                最近更新 更多