0

私のGAE/Jプロジェクトでは、Google API、スプレッドシート、カレンダーを使用しようとしています。

ただし、Spreadsheets API CONTAINERには、古いバージョンのJoinerクラスを含むgoogle-collect-1.0-rc1.jarが含まれています。

Calendarには、Calendar API CONTAINERにあるguava-jdk5-13.0.jarに付属する新しいバージョン(on()メソッドを使用)が必要です。

カレンダコードが実行されると、Joinerクラスは(古いバージョンになるように)解決され、NoSuchMethodエラーで失敗します。

これは、それらに互換性がないことを意味します。複数のクラスパス設定を試しましたが、うまくいきませんでした。スプレッドシートへのアクセスは機能しますが、カレンダーへのアクセスは失敗します。

他の誰かがこれを見て回避策を得ましたか?

4

2 に答える 2

1

google-collect-1.0-rc1.jarからJoinerクラスを削除してみてください-いくつかのjarファイルからクラスを削除しましたが、あまりきれいではありませんが、正常に動作します。

于 2013-03-05T02:51:30.013 に答える
1

'google-collect-1.0-rc1.jarは非推奨になり、'guava'jarに置き換えられました。これは https://code.google.com/p/guava-libraries/wiki/GuavaExplainedで説明されています。

問題は、OPが述べているように、一部のGoogle APIは実際には互換性がなく、非常に注意深い処理が必要なことです。たとえば、GoogleSpreadsheetsAPIは引き続きgoogle-collect-1.0-rc1.jarにパッケージ化されています

詳細については、 https ://code.google.com/p/gdata-java-client/issues/detail?id=344を参照してください。

Calendars(Oauth)をスプレッドシートで動作させるために(クライアントライブラリを使用して)行ったことは次のとおりです。

  • Eclipseプラグインを使用してGoogleAPIを管理しないでください-DEVで機能することがわかりましたが、GAEにデプロイするとすぐに機能しませんでした。デプロイプロセスは、使用するディレクトリで見つかったjarをコピーするためです。 google_apis /'-これにより、次のようなランタイムエラーが発生します。

原因:java.lang.NoSuchMethodError:
com.google.common.collect.ImmutableSet.of([Ljava / lang / Object;)Lcom / google / common / collect / ImmutableSet;

jarを手動で管理すると、上記のように、必要に応じてjarを切り替えることもできます。

  • 「javaclient」ライブラリのすべてのバージョンが同じであるとは限りません。たとえば、「gdata-client-1.0.jar」のように、同じ名前を共有している場合でも、Guavaに依存するのではなく、新しいライブラリを使用する必要があります。古いコレクションのjar:(つまり、1.4.7.1-ここからダウンロードhttps://code.google.com/p/gdata-java-client/
  • Eclipseではこれを完全に管理できないため(特に同じ名前のjarを更新する場合)、jarを手動で削除してwar / WEB-INF/libに再コピーするように注意してください。
  • 最後に、依存関係を取得しているファイルを解決することにより、ランタイムエラーを追跡するためのヒントを以下に示します。

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

于 2013-03-06T14:40:45.603 に答える