NoSuchMethod获取gdata服务时出错

我收到以下错误:

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.collect.ImmutableSet.of([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableSet; at com.google.gdata.wireformats.AltFormat$Builder.setAcceptableTypes(AltFormat.java:399) at com.google.gdata.wireformats.AltFormat$Builder.setAcceptableXmlTypes(AltFormat.java:387) at com.google.gdata.wireformats.AltFormat.(AltFormat.java:49) at com.google.gdata.client.Service.(Service.java:558) at testproject.TestProject.run(TestProject.java:22) at testproject.TestProject.main(TestProject.java:31) Java Result: 1 BUILD SUCCESSFUL (total time: 0 seconds) 

这来自以下代码:

 package testproject; import com.google.gdata.client.youtube.YouTubeService; import com.google.gdata.util.*; import java.util.logging.*; public class TestProject { public static void main(String[] args) { try { YouTubeService service = new YouTubeService("Test", "developerKey"); service.setUserCredentials("root@gmail.com", "pa$$word"); } catch (AuthenticationException ex) { Logger.getLogger(TestProject.class.getName()).log(Level.SEVERE, null, ex); } } } 

首先,我在http://code.google.com/p/gdata-java-client/downloads/list中包含了每个库,并且还导入了比我需要的更多的库。 我已经删除了我认为不必要的库(感谢thinksteep )。 所以我目前包含的库是以下库:

 mail.jar activation.jar ant.jar gdata-core-1.0.jar gdata-media-1.0.jar guava-11.0.1.jar gdata-youtube-2.0.jar gdata-youtube-met-2.0.jar 

(可能有一些图书馆没有必要……但我现在正在努力…)我只是想测试获得YouTube服务,这样我就可以了解这个项目,但是没有骰子。 哦,我还包括这个库: http : //code.google.com/p/guava-libraries,因为在我收到NoClassDefFound错误之前,包括该库似乎解决了它。 提前谢谢你的帮助! 哦,我也在gdata 入门指南中完全遵循了每一步(或者至少我是这么认为)。 我的测试版本在最后成功了…再次感谢!

添加超过要求可能也会导致问题。 如果运行时找不到具有精确签名的必需方法,则通常会发生java.lang.NoSuchMethodError错误。 可能的原因是:

 1) There might be mulitple jars with same code, which may cause wrong class get loaded. 2) Incompatable version of jar, the jar you have in classpath might be older version/newer version. 

确保没有发生这种情况。

最新版本的gdata问题仍然引用了较旧的番石榴方法

查看http://code.google.com/p/gdata-java-client/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Priority%20Milestone%20Owner%20Summary&groupby=&sort= &ID = 344

我切换到位于http://code.google.com/p/guava-libraries/downloads/detail?name=guava-r07.zip&can=4&q=的 guava-r07.jar

这让我通过了ContactsService service = new ContactsService(“”);

Jar正在使用中:

  • 默认的Eclipse插件jar
  • GDATA碱基1.0.jar
  • GDATA客户端 – 1.0.jar
  • GDATA触点-3.0.jar
  • GDATA核-1.0.jar
  • GDATA媒体-1.0.jar
  • 番石榴r07.jar

  • Apache(servlet-api.jar)

  • JavaMail(mail.jar)
  • JavaBeans Activation Framework(activation.jar)

我不知道它是否仍然相关,但我有同样的例外

guava 11.02.jar(当前最新版本)有问题

当使用guava-10.0.1(可以在这里找到)时一切顺利。

必需的库jar如下。

 gdata-client-1.0.jar gdata-core-1.0.jar gdata-media-1.0.jar gdata-youtube-2.0.jar guava-11.0.2.jar java-mail-1.4.4.jar 

我正在使用上面提到的库。 请利用它; 因为最终目的是获取YouTubeService对象。 请查看下面的代码段。

 package com.baba.test; /* * Author : Somanath Nanda */ import java.net.MalformedURLException; import java.net.URL; import com.google.gdata.client.youtube.YouTubeQuery; import com.google.gdata.client.youtube.YouTubeService; public class Test { private static final String CLIENT_ID = "XXXXXXXX.XXXXX.XXX.XXX"; private static final String DEVELOPER_KEY = "*********************************88"; public static void main(String[] args) throws MalformedURLException { YouTubeService service = new YouTubeService(CLIENT_ID,DEVELOPER_KEY); System.out.println("Service : "+service); } 

如果您正在使用构建工具(例如Maven),那么您可以从我的pom.xml中的依赖项部分的一部分执行类似于以下示例的操作:

   javax.mail mail 1.4 provided   javax javaee-api 6.0 provided   com.google.gdata core 1.47.1  

我已经将googlecollection-exp.jar添加到我的构建路径中,然后前一个execption就消失了。

注意这个jar gdata-core-1.0.jar我有同样的问题,我意识到我有这个jar gdata-core-1.0.jar的问题,我从网站上找到了同样的jar gdata-core-1.0.jar ,但内容不同。 在我更换了新的gdata-core-1.0.jar后,问题解决了。

因此,具有相同名称但其内容不同的jar是很棘手的。 你以为你有jar子,实际上它不是正确的