2012-12-12 85 views
0

我想實現谷歌分析與Java api.but我堅持這個異常谷歌分析異常

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) 

請建議我

+0

在這裏回答 - http://stackoverflow.com/questions/3126276/splitter-blows-up-on-simple-pattern? –

+0

我提到的帖子也..我有番石榴11.0.1和刪除google-collections.jar.still此異常發生。 – arjun3037

+0

你的類路徑是什麼? –

回答

1

顯然版本發現了什麼錯我的代碼?在運行時沒有Joiner.on(char separator)返回Joiner,即使Guava中的版本自從它從谷歌集合中導入以來一直有它,所以它看起來像另一個jar中的代碼的嵌入式版本(因此在代碼中沒有任何錯誤,只在你的依賴中)。

我假設HelloAnalyticsApiSample是你的代碼,可以修改。在main()添加以下行39前:

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

(或使用你選擇的日誌框架)。然後您應該獲取包含違規版本的jar的路徑。

0

在我的情況下,這是因爲我的項目中也有一個google-collection-rc1.jar,所以找到了舊版本的Joiner類(沒有方法),而不是正確的版本在番石榴罐子裏面。

要麼刪除那個集合jar(推薦),要麼將它移動到你的類路徑中,而不是番石榴jar(基本上同樣的東西,因爲我認爲集合jar中的所有類都在guava jar中)。