8

Google Guava v13.0 を使用していますが、tryFind を含むコードで JUnit テストを実行すると、次のメッセージが表示されます。

java.lang.NoSuchMethodError: com.google.common.collect.Iterables.tryFind(Ljava/lang/Iterable;Lcom/google/common/base/Predicate;)Lcom/google/common/base/Optional;

これは、JUnit テストでのみ発生するようです。製品コードが実行される場合、問題はありません。私は Intellij IDEA v11.1.3 を使用しており、guava JAR ファイルに移動して、com.google.common.collect.Iterable.class で tryFind を見つけることができます。

同様の投稿を見たことがありますが、これが JUnit とどのように関係しているかはわかりません。私の問題が何であるかについてのアイデアはありますか?

4

2 に答える 2

19

この種のエラーは通常、使用しようとしている新しいバージョンに加えて、クラスパスに古いバージョンの Guava (または google-collections) があることが原因で発生します。テストを実行するときは、クラスパスにあるものを確認してください。

于 2012-08-20T17:45:27.293 に答える
14

コリンの答えに行きましょう。ここに、ものがロードされている場所を検出する良い方法があります:

System.out.println(
    Iterables.class.getProtectionDomain().getCodeSource().getLocation()
);

これにより、使用しているグアバ (または gc) バージョンへのパスが出力されます。

于 2012-08-20T20:30:07.040 に答える