如何避免谷歌api电子表格与日历不兼容

时间:2013-03-04 22:21:03

标签: google-app-engine google-api-java-client google-spreadsheet-api

在我的GAE / J项目中,我尝试使用Google API,电子表格和日历。

但Spreadsheets API CONTAINER包含google-collect-1.0-rc1.jar,其中包含较旧版本的Joiner类。

日历需要更新版本的(使用on()方法),它与日历API容器中的guava-jdk5-13.0.jar一起提供。

当日历代码运行时,Joiner类已经解析(成为旧版本)并因NoSuchMethod错误而失败。

这意味着它们不兼容。我尝试了多个类路径设置而没有运气。电子表格访问有效,但日历访问失败。

其他人看过这个并找到了解决方法吗?

2 个答案:

答案 0 :(得分:1)

尝试从google-collect-1.0-rc1.jar中删除Joiner类 - 我从几个jar文件中删除了类,不是很干净,但工作正常。

答案 1 :(得分:1)

'google-collect-1.0-rc1.jar已弃用,已被'guava'jar取代,如下所述: https://code.google.com/p/guava-libraries/wiki/GuavaExplained

问题是,正如OP所述,某些Google API确实不兼容,需要一些非常小心的处理。例如,Google Spreadsheets API仍然附带google-collect-1.0-rc1.jar

了解更多信息,请参阅: https://code.google.com/p/gdata-java-client/issues/detail?id=344

这就是我让Calendars(Oauth)使用Spreadsheets(使用客户端库)所做的工作:

  • 不要使用Eclipse插件来管理Google API - 我发现它在DEV中有效但是一旦我部署到GAE它就无法工作,我认为因为部署过程会复制它使用的目录中找到的jar :'。google_apis /' - 这会导致运行时错误,例如:
  

引起:java.lang.NoSuchMethodError:
  com.google.common.collect.ImmutableSet.of([Ljava /郎/对象;)LCOM /谷歌/普通/收集/ ImmutableSet;

手动管理罐子还可以在必要时切换罐子,如上所述。

  • 并非所有版本的'java客户端'库都相同,即使它们可能共享相同的名称,例如'gdata-client-1.0.jar'你需要使用一个新的,如果你想要它依赖于Guava而不是旧的收藏jar :(即1.4.7.1 - 在这里下载https://code.google.com/p/gdata-java-client/
  • 小心手动删除并将你的罐子重新复制到war / WEB-INF / lib中,因为eclipse不会为你完全管理这个(特别是如果你要更新一个同名的jar)
  • 最后,通过解决从哪些文件中获取依赖项来帮助追踪运行时错误的提示:
  

System.out.println(“URL:”+                       Thread.currentThread()。getContextClassLoader()。的getResource(                       “COM /谷歌/普通/收集/ ImmutableSet.class”));