Guava java EventBus实例化错误
Posted
技术标签:
【中文标题】Guava java EventBus实例化错误【英文标题】:Guava java EventBus instantiation error 【发布时间】:2012-07-09 16:31:36 【问题描述】:我正在尝试使用 Google 的 Guava 库的 EventBus。
从 Guava 的 documentation 中实例化一个 EventBus 对象应该很容易。
我的代码:
package test;
import com.google.common.eventbus.EventBus;
public class Test
public static void main(String[] args)
EventBus bus = new EventBus("Sample");
我收到此错误:
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Objects.firstNonNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
at com.google.common.cache.CacheBuilder.getKeyStrength(CacheBuilder.java:355)
at com.google.common.cache.CustomConcurrentHashMap.<init>(CustomConcurrentHashMap.java:206)
at com.google.common.cache.ComputingCache.<init>(ComputingCache.java:39)
at com.google.common.cache.CacheBuilder.build(CacheBuilder.java:569)
at com.google.common.eventbus.EventBus.<init>(EventBus.java:156)
at test.Test.main(Test.java:7)
Java Result: 1
我尝试过使用 Guava 10.0、11.0 和 12.0,但总是出现相同的错误。我在 OSX Lion 上使用 Netbeans 7.1:我尝试过 Java 6(32 位和 64 位)和 Java 7:没有改进。在谷歌上我找不到任何东西。是番石榴的问题吗?或者,像往常一样,我错过了什么?
最好的问候,
亚历山德罗
【问题讨论】:
乍一看,这看起来像是一个错误,当您的类路径中有同一个 jar 文件的不同版本时,您通常会遇到这种错误。 我刚刚在 Windows 上尝试了相同的设置,它工作正常。我会试着看看我是否有同一个 jar 的不同版本。我会告诉你的 尝试使用-verbose:class
命令行选项来查看你的类实际上是从哪里加载的。
非常感谢,现在可以使用了。我在 /System/Library/Java/Extensions 中有一些 jars 实现了不同版本的 Guava:-verbose:class 是一个很好的建议:)
【参考方案1】:
为了扩展@biziclop 所说的内容,您很可能在您的类路径中同时拥有最新版本的 Guava 和 google-collect 或 3.0 之前的 Guava 版本。 Objects.firstNonNull 是在 3.0 中添加的,表明正在加载该类的旧版本。
【讨论】:
感谢您在此答案中提及 google-collections - 这是我的问题。在 pom 中排除它就可以了。 我有 2 个版本的番石榴,它给了我 Objects.firstNonNull 错误:找不到符号。删除其中一个修复了错误。【参考方案2】:我遇到了同样的问题。我使用的是 google-collections 1.0,其中 guava 是 v11。这个问题在我升级到之后就消失了
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
来自
<dependency>
<groupId>com.google.collections</groupId>
<artifactId>google-collections</artifactId>
<version>1.0</version>
</dependency>
【讨论】:
以上是关于Guava java EventBus实例化错误的主要内容,如果未能解决你的问题,请参考以下文章