2013-02-20 24 views
1

問題我已經使用了以下jar文件在我的類路徑檢索使用YouTube API我的訂閱名單:無法在Java運行youtubedata API 2.0作爲與番石榴

GDATA,客戶1.0.jar GDATA核心-1.0.jar GDATA媒體-1.0.jar GDATA-的YouTube-2.0.jar 番石榴14.0 rc1.jar 的mail.jar

代碼如下:

import com.google.gdata.client.*; 
import com.google.gdata.client.youtube.*; 
import com.google.gdata.data.*; 
import com.google.gdata.data.geo.impl.*; 
import com.google.gdata.data.media.*; 
import com.google.gdata.data.media.mediarss.*; 
import com.google.gdata.data.youtube.*; 
import com.google.gdata.data.extensions.*; 
import com.google.gdata.util.*; 

import java.io.IOException; 
import java.io.File; 
import java.net.MalformedURLException; 
import java.net.URL; 

public class YouTubeExample { 


    public static void main (String args[]) throws MalformedURLException, IOException, ServiceException{ 
     String developer_key = "CSCSCSCSCSCScSCXXXXX-XXXXX_-XXXX"; 
     YouTubeService service = new YouTubeService(developer_key); 

     //Retrieving video subscriptions 
     String feedUrl = 
       "http://gdata.youtube.com/feeds/api/users/GoogleDevelopers/subscriptions"; 

     SubscriptionFeed feed = service.getFeed(new URL(feedUrl), SubscriptionFeed.class); 

     for(SubscriptionEntry entry : feed.getEntries()) { 
      System.out.println("Title: " + entry.getTitle().getPlainText()); 
      System.out.println("Feed Link: " + entry.getFeedUrl()); 
     } 

    } 

} 

但是,在運行此操作時,出現如下錯誤:

線程「main」中的異常java.lang.NoSuchMethodError:com.google.common.collect.ImmutableSet.of([Ljava/lang/Object;)Lcom /谷歌/普通/收集/ 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) 在com.google.gdata.client.Service。(Service.java:535) 在YouTubeExample.main(YouTubeExample.java:21)

,如果我在類路徑中將guava-14.0-rc1.jar替換爲guava-10.0.1.jar(根據某些建議,舊版本),我仍然得到如下錯誤:

線程「main」中的異常java.lang.NoSuchMethodError: com.google.gdata.data.ExtensionProfile.declareAdditi onalNamespace(com/google/gdata/util/common/xml/XmlWriter $命名空間;)V at com.google.gdata.data.youtube.CommentEntry.declareExtensions(CommentEntry.java:92) at com.google.gdata。 (com.google.gdata.data.ExtensionProfile.addDeclarations(ExtensionProfile.java: 71) 在com.google.gdata.client.youtube.YouTubeService。(YouTubeService.java:140) 在com.google.gdata.client.youtube.YouTubeService。(YouTubeService.java:103) 在YouTubeExample.main( YouTubeExample.java:21)

我試過了包括activation.jar,servlet-api.j但沒有運氣!我也嘗試過舊版本,如番石榴0.7罐,但沒有運氣。請幫忙!

回答

2

不要導入所有。

看來您的項目依賴於最近的API和舊的API。你不應該。所以只要檢查一下this page說什麼。

當使用Maven來運行你的代碼,我只需要如下:

<dependencies> 
    <dependency> 
     <groupId>com.google.gdata</groupId> 
     <artifactId>core</artifactId> 
     <version>1.47.1</version> 
    </dependency> 
</dependencies> 

的Maven是有趣的,因爲我們可以看到所有的隱藏的依賴,我們可以手動管理他們有一個正確安裝與所有最新版本的庫。

滿樹包括以下內容:

core: 1.47.1 
    guava: 13.0.1 
    google-oauth-client-jetty: 1.11.0-beta 
    google-oauth-client-java6: 1.11.0-beta 
     google-auth-client: 1.11.0-beta 
     google-http-client: 1.11.0-beta 
      jsr305: 1.3.9 (omitted for conflict with 1.3.7) 
      guava: 11.0.1 (omitted for conflict with 13.0.1) 
      httpclient: 4.0.3 
      httpcore: 4.0.1 
      commons-logging: 1.1.1 
      commons-codec: 1.3 
      xpp3: 1.1.4 
     jsr305: 1.3.9 (omitted for conflict with 1.3.7) 
     guava: 11.0.1 (omitted for conflict with 13.0.1) 
    jetty: 6.1.26 
     jetty-util: 6.1.26 
     servlet-api: 2.5-20081211 
    jsr305: 1.3.7 
    mail: 1.4 
    activation: 1.1 

這棵樹爲我們展示了它的安全使用番石榴13.0.1和你並不真正需要所有你想包括其他的API,所以索性別理他們。

如果你不使用Maven,只需使用這裏的項目:https://code.google.com/p/gdata-java-client/downloads/list

+0

很高興能幫助! – 2013-02-20 11:54:11

+0

不完整的pom.xml。 – pilcrowpipe 2013-04-02 19:21:16

+0

那麼?示例需要足以表明可以理解。在這種情況下,我看不到'pom.xml'的其餘部分是否有用。我不想在這裏教Maven,因爲我對那些不熟悉Maven的人給出了「解決方法」。我只是想說只需要一個依賴項。 Maven在上面提到的完美實現。在這種情況下,不需要編寫完整的'pom.xml'。 – 2013-04-03 12:47:26