【问题标题】:How to fix java.lang.NoClassDefFoundError如何修复 java.lang.NoClassDefFoundError
【发布时间】:2014-09-24 15:09:22
【问题描述】:

大家好,在我的代码中,我正在创建一个 com.google.api.client.json.JsonFactory 的新对象

 final static JsonFactory JSON_FACTORY = new JacksonFactory();

当我在调试模式下运行我的程序时,在执行这一行之后。编译器给出一个例外,即

    run:
java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonFactory
    at com.google.api.client.json.jackson2.JacksonFactory.<init>(JacksonFactory.java:45)
    at googleauthtest.GoogleAuthTest.<clinit>(GoogleAuthTest.java:25)
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:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    ... 2 more
Exception in thread "main" Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

我该如何解决这个问题?提前致谢

以上问题已修复。现在我陷入了另一个问题,我知道这些问题是由于版本不兼容而出现的。那么任何人都可以告诉我将 YouTube 数据 API V3 与 java 包装器集成的依赖项是什么。我正在使用服务帐户进行身份验证。

下面是我的java代码..

package googleauthtest;

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.youtube.YouTube;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Authentication {

   final static HttpTransport TRANSPORT = new NetHttpTransport();
   final static JsonFactory JSON_FACTORY = new JacksonFactory();

   com.google.api.client.googleapis.services.json.AbstractGoogleJsonClient h;
   public static void main(String []g) throws Exception
   {
      List<String>scops = new <String>ArrayList();
      scops.add("https://www.googleapis.com/auth/youtube");

      GoogleCredential credential = null;
      try
      {
         credential = new GoogleCredential.Builder()
        .setTransport(TRANSPORT)
        .setJsonFactory(JSON_FACTORY)
        .setServiceAccountId(Constants.SERVICE_ACCOUNT_ID)
        .setServiceAccountScopes(scops)
        .setServiceAccountPrivateKeyFromP12File(new File("*****/GoogleAuthTest/src/googleauthtest/key.p12"))
        //.setClientSecrets("74279030240-db333th3oph219blk19kkh540m0gu4f5.apps.googleusercontent.com","")
        //.setClientSecrets(GoogleClientSecrets.load(JSON_FACTORY,new InputStreamReader(java.io.Reader.class.getResourceAsStream("client_secrets.json"))))
        .build();

        credential.refreshToken();
        System.out.println(credential.getAccessToken());
        System.out.println(credential.getTokenServerEncodedUrl());
        System.out.println(credential.getExpiresInSeconds());
        System.out.println(credential.getServiceAccountPrivateKey().toString());
        //credential.getServiceAccountPrivateKey();

        YouTube youtube = new YouTube.Builder(TRANSPORT, JSON_FACTORY, credential).setApplicationName("").build();
      }
      catch(IOException e)
      {
          System.out.println(e.toString());
      }

   }
}

新的错误控制台..

Exception in thread "main" java.lang.NoSuchMethodError: com.google.api.client.googleapis.services.json.AbstractGoogleJsonClient.<init>(Lcom/google/api/client/http/HttpTransport;Lcom/google/api/client/http/HttpRequestInitializer;Ljava/lang/String;Ljava/lang/String;Lcom/google/api/client/json/JsonObjectParser;Lcom/google/api/client/googleapis/services/GoogleClientRequestInitializer;Ljava/lang/String;Z)V
    at com.google.api.services.youtube.YouTube.<init>(YouTube.java:135)
    at com.google.api.services.youtube.YouTube$Builder.build(YouTube.java:6446)
    at googleauthtest.Authentication.main(Authentication.java:54)
Java Result: 1
BUILD SUCCESSFUL (total time: 10 seconds)

JAR 依赖::

请访问this链接

【问题讨论】:

  • 你是否在buildpath中添加了所需的jar
  • 您是否在使用 Google API 打包的版本之上使用不同的 Jackson 版本?他们是打包 Jackson 还是应该手动添加?
  • @hcl 兄弟,是的,我已经添加了相应的 jar 文件。这样它就不会给出任何编译时错误。但是当我运行我的代码时,它给出了同样的错误。
  • @Mena 我已经手动包含了这个杰克逊罐子。我猜他们可能在内部使用 com.fasterxml.jackson.core.JsonFactory 并且我添加了 com.google.api.client.json.JsonFactory。那么我应该改变我的jar包吗???

标签: java oauth-2.0 google-api-java-client


【解决方案1】:

NoSuchMethodError 提示您的 jar 版本不兼容。即

你有一个 jar 引用了另一个 jar 来调用 AbstractGoogleJsonClient 类的方法,其中 com.google.api.client.googleapis.services.json.AbstractGoogleJsonClient 类没有所需的方法!

解决办法是找到jar之间的依赖关系(版本依赖)并将jar更新到最新/对应的版本。

为什么不粘贴代码和 jar 版本?这样我们就可以查看使用的代码和jar。

【讨论】:

  • 我已经解决了这个错误。现在我被另一个挑战困住了。现在我在线程“main”java.lang.NoSuchMethodError: com.google.api.client.googleapis.services.json.AbstractGoogleJsonClient. 中遇到异常
  • 我已经用我包含的新错误和 jar 图像编辑了问题。看看..
  • 谢谢。我认为这是早期版本的 Google API 的问题 (code.google.com/p/buzz-java-client/issues/detail?id=18) 尝试将您的 jar 升级到最新的 Google API
  • 谢谢哥们。但是你能告诉我如何使用 Maven 维护我的存储库吗??
  • 希望你能在这里得到答案:code.google.com/p/google-oauth-java-client/wiki/Setup
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 2014-04-17
  • 2022-12-03
  • 2020-08-13
  • 1970-01-01
  • 2015-05-31
  • 2017-04-27
相关资源
最近更新 更多