Ошибка создания экземпляра EventBus в Guava Java

Я пытаюсь использовать EventBus библиотек Google Guava.

Из документации Guava должно быть легко для создания экземпляра объекта 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: никаких улучшений. В гугле ничего не могу найти. Это проблема с гуавой? Или, как обычно, я что-то упускаю?

С наилучшими пожеланиями,

Алессандро


person Alejander    schedule 09.07.2012    source источник
comment
На первый взгляд это выглядит как ошибка, которую вы обычно получаете, когда у вас есть разные версии одного и того же jar-файла в пути к классам.   -  person biziclop    schedule 09.07.2012
comment
Я только что попробовал в Windows с такими же настройками, и все работает нормально. Я постараюсь посмотреть, есть ли у меня разные версии одной и той же банки. Я дам Вам знать   -  person Alejander    schedule 09.07.2012
comment
Попробуйте параметр командной строки -verbose:class, чтобы увидеть, откуда на самом деле загружаются ваши классы.   -  person biziclop    schedule 09.07.2012
comment
Большое спасибо, теперь все работает. У меня было несколько банок в /System/Library/Java/Extensions, в которых была реализована другая версия Guava: -verbose:class было хорошим предложением :)   -  person Alejander    schedule 09.07.2012


Ответы (2)


Чтобы расширить то, что сказал @biziclop, у вас, скорее всего, есть как последняя версия Guava, так и либо google-collect, либо версия Guava до 3.0 в вашем пути к классам. Objects.firstNonNull был добавлен в 3.0, предполагая, что загружается старая версия этого класса.

person ColinD    schedule 09.07.2012
comment
Спасибо за упоминание google-коллекций в этом ответе - это была моя проблема. Исключение этого в pom делает свое дело. - person Ryan; 16.11.2012
comment
У меня было 2 версии гуавы, и это выдавало мне ошибку Objects.firstNonNull: не удается найти символ. Удаление одного из них исправило ошибку. - person K.K; 24.05.2017

У меня такая же проблема. Я использовал google-коллекции 1.0, где гуава — это версия 11. Эта проблема исчезла после того, как я обновился до

<!-- 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>
person jprism    schedule 21.06.2016