JUnit抛出java.lang.NoSuchMethodError对于com.google.common.collect.Iterables.tryFind
我正在使用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。
我见过类似post,但我不确定这与JUnit有什么关系。 关于我的问题可能是什么想法?
除了您尝试使用的较新版本之外,这种错误通常是由于在类路径上使用旧版本的Guava(甚至是google-collections)引起的。 在运行测试时尝试检查类路径上的内容。
跟Colin的回答一起,这是一个检测内容加载位置的好方法:
System.out.println( Iterables.class.getProtectionDomain().getCodeSource().getLocation() );
这应该打印出您正在使用的番石榴(或gc)版本的路径。
- 如何扫描类注释?
- Guava可选作为可选参数的方法参数
- NoSuchMethodError:com.google.common.base.Stopwatch.createStarted()Lcom / google / common / base / Stopwatch
- 为什么Guava类提供了如此多的工厂方法而不是只提供varargs的方法?
- Java:用于确定等价的外部类?
- Java Guava组合Multimap和Cache
- 我是否使用Google Guava正确实现了equals和hashCode?
- Guava EventBus中的注释与接口
- Guava-11.0.2.jar与com.google.common_1.0.0.0_0-6.jar有冲突吗?