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

使用 Colin 的回答,这是检测加载内容的好方法:

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

这应该打印出您正在使用的番石榴(或 gc)版本的路径。

于 2012-08-20T20:30:07.040 回答