2012-02-10 83 views
3

我收到以下錯誤: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.<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("[email protected]", "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中準確地(或者至少我是這麼認爲)遵循了每一步。我的測試版最終成功了......再次感謝!

回答

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. 

確保沒有這些情況發生。

+0

感謝您的迴應。我仍然收到錯誤。 我刪除了我認爲不必要的所有罐子,並刪除了所有不必要的進口,並收到相同的錯誤。我已更新該帖子以反映代碼現在的樣子。 – kentcdodds 2012-02-10 04:33:20

+0

檢查這個鏈接,似乎與番石榴庫有矛盾。 http://code.google.com/p/gdata-java-client/issues/detail?id=344 – kosa 2012-02-10 04:36:15

+0

這就是我的問題!現在我只需要弄清楚他們的解決方案是什麼意思...... Okris(在該線程上)說:_Solution正在改變爲ImmutableSet.copyOf(E []元素)_,但我不確定是什麼這意味着我應該這樣做。你能指導我多走一步嗎?謝謝你的幫助! – kentcdodds 2012-02-10 04:45:00

0

我不知道它仍然相關,但我有同樣的例外

存在與番石榴11.02.jar(目前最新的版本)中的問題

使用番石榴10.0.1(可以發現,當here)一切順利。

+0

謝謝,是的,那已經回答了。還有一個比9更新的版本,它的工作原理如下:http://code.google.com/p/guava-libraries/wiki/Release10 – kentcdodds 2012-03-02 19:59:24

4

問題與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

解決方案

我切換到番石榴r07.jar位於 http://code.google.com/p/guava-libraries/downloads/detail?name=guava-r07.zip&can=4&q=

這讓我過去了 ContactsService service = new ContactsS ervice( 「」);

罐的使用:

  • 默認Eclipse插件JAR的
  • GDATA基-1.0.jar
  • GDATA,客戶1.0.jar
  • GDATA觸點-3.0.jar
  • gdata-core-1.0.jar
  • gdata-media-1.0。罐子
  • 番石榴r07.jar

  • 的Apache(servlet的api.jar文件)

  • JavaMail的(的mail.jar)
  • JavaBeans激活框架(沒有activation.jar)
+1

+1但是請注意,此問題現已通過1.47.0版本修復:http: //code.google.com/p/gdata-java-client/issues/detail?id=344#c13 – 2012-05-11 16:07:05

0

必需的庫罐如下。

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 

我正在使用上面提到的庫。請利用它;因爲最終目標是獲得YouTube服務對象。檢查下面的代碼片段。

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); 
} 
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> 
0

我已經將googlecollection-exp.jar添加到了我的構建路徑中,然後之前的執行結束了。

+0

你的意思是NoSuchMethod錯誤,對不對?你可能想要擴大一點。你確定你得到的堆棧跟問題中的堆棧相似嗎? – rene 2015-09-21 11:15:19

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很困難。你以爲你有這個罐子,其實這不是正確的