私はGuava-05-snapshotをSunのJDK1.6で使用しています。コードは次のスニペットを実行すると爆発します。
List<String> badpasswords = Lists.newArrayList( Password.badWords);
Collections.sort(badpasswords);
ImmutableList<String> tmp = ImmutableList.copyOf(badpasswords);
特にImmutableList.copyOf()呼び出しで。このコードは、古いGoogle-Collectionsコードを使用して、何ヶ月も機能しています。
Java.lang.NoSuchMethodError: com.google.common.collect.ImmutableList.copyOf(Ljava/util/Collection;)Lcom/google/common/collect/ImmutableList;
Password.badWords
はImmutableSet<String>
そして書き込み可能な配列の作成とソートは完全に機能します。しかし、配列をImmutableList
に変換しようとしても失敗します。
Guavaは完全に互換性のあるGoogleコレクションのスーパーセットです。互換性のない方法で何も変更していません。 (これは、最新のguava jarに対してGoogleコレクションテストスイート全体(拡張)を実行することによってテストされます。)
Google-collect-*。jarのコピーがまだクラスパスに入っていると思います。明示的に、または他のjarファイルに再パッケージせずに含まれているため。あなたはそれを見つけて削除する必要があります。
Googleコレクションには、ImmutableList.copyOf(Iterable)
メソッドがあり、パブリックImmutableList.copyOf(Collection)
メソッドはありませんでした。コレクションも反復可能であるため、これは問題ありません。 Guavaでは、コレクションのオーバーロードを追加しました。これは完全に互換性があります。これは、コンパイルに使用されたすべてのソースが引き続き可能であり、以前にコンパイルされたソースはすべて、元のメソッドを参照するだけです。
Guavaに対してコンパイルした後、Googleコレクションに対して実行すると、問題が発生します。私はそれが起こっている可能性が高いと信じています。
これまた Mavenからの公式(スナップショットではない)guava-r05リリースを使用すると問題なく動作します。ちなみに、これは同じことを行うためのもう少し良い方法かもしれません:
ImmutableList<String> sorted = Ordering.natural()
.immutableSortedCopy(Password.badWords);
WebアプリケーションをWebLogic12cにデプロイするときにエラーが発生した場合(ただし、guavaJARはWEB-INF/libにあります)、weblogic.xmlの次の構成が問題の解決に役立ちます。
<container-descriptor>
<prefer-application-packages>
<package-name>com.google</package-name>
</prefer-application-packages>
</container-descriptor>
1)guava-XX.X.X.jarを http://code.google.com/p/guava-libraries/ からダウンロードします。2)Eclipseでプロジェクトを右クリックし、ビルドパスを選択してこのjarを追加します。
GWTにバンドルされているGuavaを使用 動作しました。
ここcode.google.com/p/guava-librariesから両方のGuavaJarファイル(バージョン13)をwar/WEB-INF/libに追加し、guava-13.0.1.jarをビルドパスに追加しました(右クリックして追加パスを構築する)