Google app engine 如何避免google api电子表格与日历不兼容

Google app engine 如何避免google api电子表格与日历不兼容,google-app-engine,google-api-java-client,google-spreadsheet-api,Google App Engine,Google Api Java Client,Google Spreadsheet Api,在我的GAE/J项目中,我试图使用谷歌API、电子表格和日历 但是Spreadsheets API容器包含google-collect-1.0-rc1.jar,其中包含Joiner类的旧版本 Calendar需要更新版本的Calendar(使用on()方法),即Calendar API容器中的guava-jdk5-13.0.jar 当日历代码运行时,Joiner类已被解析(为较旧版本),并因NoSuchMethod错误而失败 这意味着它们是不兼容的。我尝试了多个类路径设置,但没有成功。电子表格访

在我的GAE/J项目中,我试图使用谷歌API、电子表格和日历

但是Spreadsheets API容器包含google-collect-1.0-rc1.jar,其中包含Joiner类的旧版本

Calendar需要更新版本的Calendar(使用on()方法),即Calendar API容器中的guava-jdk5-13.0.jar

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

这意味着它们是不兼容的。我尝试了多个类路径设置,但没有成功。电子表格访问正常,但日历访问失败


其他人看到了这一点并找到了解决办法吗?

尝试从google-collect-1.0-rc1.jar中删除Joiner类-我已经从一些jar文件中删除了类,虽然不是很干净,但效果很好。

google-collect-1.0-rc1.jar已被弃用,并已被“guava”jar取代,如下所述:

问题是,正如OP所说,一些Google API确实不兼容,需要非常小心的处理。例如,GoogleSpreadsheetsAPI仍然与Google-collect-1.0-rc1.jar打包在一起

有关更多信息,请参阅:

下面是我为使日历(Oauth)与电子表格(使用客户端LIB)一起工作所做的工作:

  • 不要使用Eclipse插件来管理Google API-我发现它在DEV中工作,但一旦我部署到GAE它就不工作了,我认为这是因为部署过程复制了在它使用的目录中找到的JAR:'.Google_API/'-这会导致运行时错误,例如:
原因:java.lang.NoSuchMethodError:
com.google.common.collect.ImmutableSet.of([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableSet

如上文所述,手动管理jar还允许您在必要时切换jar

  • 并非所有版本的“java客户端”库都是相同的,即使它们可能共享相同的名称,例如“gdata-client-1.0.jar”。如果您希望它依赖于Guava而不是旧的collections jar,则需要使用新的库:(即1.4.7.1-下载此处)
  • 小心手动删除jar并将其重新复制到war/WEB-INF/lib中,因为eclipse不会完全为您管理它(尤其是在更新同名jar时)
  • 最后,提供一个技巧,通过解析从哪些文件获取依赖项来帮助跟踪运行时错误:
System.out.println(“URL:”+ Thread.currentThread().getContextClassLoader().getResource( “com/google/common/collect/ImmutableSet.class”)


如果您切换到驱动器API,您就不必担心在GData库和
google API java客户端之间来回切换。IIRC,电子表格API无论如何都不推荐使用。bossylobster-电子表格API v3.0在这里,只有v1和v2不推荐使用:(我发现它比GoogleApps脚本更快,尽管GAS有更好的功能范围)接着说:“我发现它在DEV中工作,但在我部署到GAE后就不工作了。”----jar的加载顺序可能会发生变化,加载顺序会导致GAE问题。当jar文件中存在一个类的两个版本时,可能会导致GAE尝试使用错误版本的类。这就是我最后使用JarPlug BTW所做的。它对电子表格API版本的变化不太鲁棒,jar Eclipse管理……但可以工作。