0

在我的GAE/J項目中,我嘗試使用Google API,電子表格和日曆。如何避免谷歌api電子表格與日曆不兼容

但是Spreadsheets API CONTAINER包含google-collect-1.0-rc1.jar,其中包含舊版本的Joiner類。

日曆需要使用日曆API容器中的guava-jdk5-13.0.jar附帶的更新版本(使用on()方法)。

日曆代碼運行時,Joiner類已解析(成爲舊版本),並失敗並出現NoSuchMethod錯誤。

這意味着它們不兼容。我嘗試過多個類路徑設置,但沒有運氣。電子表格訪問工作,但日曆訪問失敗。

其他人看到了這個,並得到了解決方法?

+0

如果切換到驅動器API,你會不會擔心來回切換的的GData庫之間和'谷歌API-JAV A-client'。 IIRC,Spreadsheets API無論如何都被棄用。 – bossylobster 2013-03-05 02:21:31

+0

bossylobster - 電子表格api v3。0在這裏,只有v1和v2被棄用:https://developers.google.com/google-apps/spreadsheets/(我發現它比谷歌應用腳​​本更快,雖然GAS有更好的功能範圍) – eddyparkinson 2013-03-05 02:42:54

回答

1

嘗試從google-collect-1.0-rc1.jar中刪除Joiner類 - 我從幾個jar文件中刪除了類,不是很乾淨,但工作正常。

+0

這就是最後我使用了JarPlug。它不太適合Spreadsheets API版本和Eclipse Eclipse管理版本的變化......但是很有效。 – 2013-03-10 15:06:36

1

「谷歌收集-1.0-rc1.jar已被棄用,由已取代‘在此所說明番石榴’罐子: https://code.google.com/p/guava-libraries/wiki/GuavaExplained

的問題是,由於OP狀態,一些谷歌API的是確實不相容,需要一些非常小心的處理。例如谷歌電子表格API還是來包裝的谷歌,收集-1.0-rc1.jar

更多信息,請參閱: https://code.google.com/p/gdata-java-client/issues/detail?id=344

這裏就是我做得到日曆(端Oauth)使用電子表格的工作(使用客戶端庫):

  • 不使用Eclipse插件來管理谷歌API的 - 我發現它在DEV工作,但只要我部署到GAE它沒有工作,我想是因爲部署進程將罐子在它使用的目錄中找到:'.google_apis /' - 這會導致運行時錯誤,如:

Caused by: java.lang.NoSuchMethodError:
com.google.common.collect.ImmutableSet.of([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableSet;

如上所述,手動管理罐子還可以在必要時切換罐子。

  • 並非所有版本的'java客戶端'庫都是相同的,儘管它們可能共享相同的名稱,例如, 'gdata-client-1.0.jar'你需要使用一個新的,如果你想它依靠番石榴而不是舊的收藏jar:(即1.4.7.1 - 在這裏下載https://code.google.com/p/gdata-java-client/
  • 小心手動刪除和將你的jar重新複製到war/WEB-INF/lib中,因爲eclipse不會完全爲你管理這個(特別是如果你正在更新一個同名的jar)
  • 最後,一個幫助跟蹤運行時錯誤的提示通過解決哪些文件是從採購你的依賴:

System.out.println("URL: " + Thread.currentThread().getContextClassLoader().getResource( "com/google/common/collect/ImmutableSet.class"));

+0

展開:「我發現它在DEV中工作,但是一旦我部署到GAE,它就無法工作」 - 裝入的訂單罐可能會更改,裝入訂單會導致GAE問題。當jar文件中存在兩個版本的類時,它可能會導致GAE嘗試使用該類的錯誤版本。 – eddyparkinson 2013-03-07 05:50:50