我收到以下错误:
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.<clinit>(AltFormat.java:49)
at com.google.gdata.client.Service.<clinit>(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 getting started guide中完全遵循了每一步(或者至少我是这么认为)。我的测试版本在最后成功了......再次感谢!
答案 0 :(得分:12)
添加超过要求可能也会引起问题。如果运行时找不到具有精确签名的必需方法,则通常会发生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.
确保没有发生这种情况。
答案 1 :(得分:4)
最新版本的gdata问题仍然引用旧的番石榴方法
<强>解决方案强>
我切换到位于的guava-r07.jar http://code.google.com/p/guava-libraries/downloads/detail?name=guava-r07.zip&can=4&q=
这让我过去了 ContactsService service = new ContactsService(“”);
Jar正在使用中:
番石榴r07.jar
Apache(servlet-api.jar)
答案 2 :(得分:0)
答案 3 :(得分:0)
必需的库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);
}
答案 4 :(得分:0)
如果您正在使用构建工具(例如Maven),那么您可以在我的pom.xml中的一部分依赖项部分中执行类似于以下示例的操作:
<!-- The mail dependency is required BEFORE the javaee-api dependency.
The gdata dependency (YouTube API) requires the mail dependency. -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.gdata</groupId>
<artifactId>core</artifactId>
<version>1.47.1</version>
</dependency>
答案 5 :(得分:0)
我已将googlecollection-exp.jar添加到我的构建路径中,然后前一个execption就消失了。
答案 6 :(得分:0)
注意这个jar gdata-core-1.0.jar我有同样的问题,我意识到我有这个jar gdata-core-1.0.jar的问题,我发现从网站上同样的jar gdata-core- 1.0.jar,但内容不同。在我更换了新的gdata-core-1.0.jar之后,问题就解决了。
因此具有相同名称但其内容不同的jar是很棘手的。你以为你有罐子,实际上它不是正确的
答案 7 :(得分:0)
可能是您的某些jar依赖于google / guava jar,如果它们不在构建路径中,或者如果存在多个,则可能会导致不一致,从而导致错误。一种快速的解决方案是将最新版本的番石榴添加到您的pom中
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>24.0-jre</version>
</dependency>
现在检查依赖关系层次结构中,除番石榴之外的任何Jar是否都引用了其他任何较旧的番石榴/ google-collection jar。如果是这样,那就排除它,像这样
<exclusions>
<exclusion>
<groupId>com.google.collections</groupId>
<artifactId>google-collections</artifactId>
</exclusion>
</exclusions>