【问题标题】:How to avoid google api spreadsheets incompatibility with calendar如何避免 google api 电子表格与日历不兼容
【发布时间】:2013-03-04 22:21:02
【问题描述】:

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

但电子表格 API CONTAINER 包含 google-collect-1.0-rc1.jar,其中包含旧版本的 Joiner 类。

Calendar 需要更新版本的它(使用 on() 方法),它随 guava-jdk5-13.0.jar 一起提供,位于 Calendar API CONTAINER 中。

当 Calendar 代码运行时,Joiner 类已被解析(成为旧版本)并失败并出现 NoSuchMethod 错误。

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

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

【问题讨论】:

  • 如果您切换到 Drive API,您将不必担心在 GData 库和google-api-java-client 之间来回切换。 IIRC,Spreadsheets API 无论如何都被弃用了。
  • bossylobster - 电子表格 api v3.0 在这里,只有 v1 和 v2 被弃用:developers.google.com/google-apps/spreadsheets(我发现它比 Google 应用程序脚本更快,尽管 GAS 具有更好的功能范围)跨度>

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


【解决方案1】:

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

【讨论】:

  • 这就是我最后所做的,使用 JarPlug BTW。它对 Spreadsheets API 和 JAR Eclipse 管理的版本的更改不是那么健壮……但可以工作。
【解决方案2】:

'google-collect-1.0-rc1.jar 已弃用,并已被此处描述的 'guava' jar 取代: https://code.google.com/p/guava-libraries/wiki/GuavaExplained

问题在于,正如 OP 所述,某些 Google API 确实不兼容,需要一些非常小心的处理。例如,Google 电子表格 API 仍然与 google-collect-1.0-rc1.jar 打包在一起

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

这是我为让 Calendars(Oauth) 与电子表格一起使用所做的工作(使用客户端库):

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

原因: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 而不是旧的集合 jar,你需要使用一个新的:(即 1.4.7.1 - 在此处下载 https://code.google.com/p/gdata-java-client/
  • 小心手动删除并重新复制您的 jar 到 war/WEB-INF/lib 中,因为 eclipse 不会为您完全管理这个(特别是如果您正在更新同名的 jar)
  • 最后,通过解决您从哪些文件中获取依赖项来帮助跟踪运行时错误的提示:

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

【讨论】:

  • 扩展:“我发现它在 DEV 中工作,但一旦我部署到 GAE 它就不起作用”----加载的顺序 jar 可以更改,加载顺序导致GAE 问题。当 jar 文件中存在一个类的 2 个版本时,可能会导致 GAE 尝试使用该类的错误版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 2020-05-15
相关资源
最近更新 更多