0

我正在尝试使用 java api 实现谷歌分析。但我遇到了这个异常

java.lang.NoSuchMethodError: com.google.common.base.Joiner.on(C)Lcom/google/common/base/Joiner;
at com.google.api.client.auth.oauth2.AuthorizationCodeFlow$Builder.setScopes(AuthorizationCodeFlow.java:644)
at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow$Builder.setScopes(GoogleAuthorizationCodeFlow.java:256)
at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow$Builder.<init>(GoogleAuthorizationCodeFlow.java:225)
at com.stpl.pats.bl.event.general.HelloAnalyticsApiSample.authorize(HelloAnalyticsApiSample.java:71)
at com.stpl.pats.bl.event.general.HelloAnalyticsApiSample.initializeAnalytics(HelloAnalyticsApiSample.java:157)
at com.stpl.pats.bl.event.general.HelloAnalyticsApiSample.main(HelloAnalyticsApiSample.java:39)

请建议我的代码有什么问题...

4

2 回答 2

1

显然,在运行时找到的版本没有Joiner.on(char separator)返回 a Joiner,即使 Guava 中的版本自从它从 google-collections 导入以来一直有它,所以它看起来像是另一个 jar 中代码的嵌入式版本(所以没有任何问题您的代码,仅在您的依赖项中)。

我假设HelloAnalyticsApiSample是您的代码并且可以修改。main()在第 39 行之前添加以下内容:

System.out.println(com.google.common.base.Joiner.class
        .getProtectionDomain().getCodeSource().getLocation());

(或使用您选择的日志框架)。然后,您应该获得包含违规版本的 jar 的路径。

于 2012-12-17T14:27:05.807 回答
0

就我而言,这是因为我的项目中还有一个 google-collection-rc1.jar,因此找到了 Joiner 类的旧版本(没有该方法),而不是番石榴中的正确版本罐。

要么删除该集合 jar(推荐),要么将其移到类路径中的后面,而不是 guava jar(这基本上是同一件事,因为我认为集合 jar 中的所有类都在 guava jar 中)。

于 2013-03-03T14:05:29.410 回答