我正在开发一个AppEngine应用程序,在那里我必须使用Google Calendar API。由于某些原因,我们没有使用此API(v3)的最新版本,我们正在使用gdata-calendar-v2,该版本将一直工作到明年11月。
好吧,我有两种使用日历服务的方法。一方面,我在日历上添加了一个新的活动,我做了一些类似的事情:
CalendarService myService = new CalendarService("my_calendar"); // error on this line
myService.setUserCredentials(EMAIL, PASSWORD);
据我所知,它运行良好,我正在日历上添加新的事件,没有任何问题。
另一方面,我有另一种方法,我可以做一些不同的事情,但我使用相同的代码片段连接到谷歌日历。在这种情况下,我得到这个错误:
Caused by: java.lang.NoSuchMethodError: com.google.common.collect.ImmutableSet.copyOf([Ljava/lang/Object;)Lcom/google/common/collect/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.<clinit>(AltFormat.java:49)
at com.google.gdata.client.Service.<clinit>(Service.java:558)
我正在使用的库-收藏-你可能会感兴趣的是:
- Guava 11(我已经更新到18了,也是同样的问题)
我知道这里有一个非常相似的线程也有同样的问题,但有一个区别:它在我项目的一种方法中运行良好,而在另一个方法中运行不好。
你能帮我一把吗?
提前感谢您,迭戈。
解决方案:
我一直在谷歌上搜索,发现了这个帖子我已经把我的番石榴换成了番石榴-10.0.1.jar,我再也没有这个错误了。
用于java的gdata客户端库的最新版本(截至本文撰写之时,版本为1.46.0,可在此处找到:https://code.google.com/p/gdata-java-client/downloads/list)仍然在它们的依赖项中嵌入了google-collections-1.0-rc1.jar,在这一点上,它无法被最新的番石榴版本所取代。
很可能您使用了两个不同版本的Guava。添加行
System.out.println(ImmutableSet.class.getClass().getResource("/"));
到异常前的行,以找出冲突版本所在的位置。
目前Guava有的方法
public static <E> ImmutableSet<E> copyOf(E[] elements) {}
一些旧版本(例如,谷歌收藏)没有。看起来像
com.google.gdata.wireformats.AltFormat$Builder
访问旧版本。