2012-07-09 6 views
6

Sto cercando di utilizzare EventBus delle librerie Guava di Google.Guava java EventBus errore di istanza

Da Guava documentation dovrebbe essere facile creare un'istanza di un oggetto EventBus.

Il mio codice:

package test; 

import com.google.common.eventbus.EventBus; 

public class Test { 
    public static void main(String[] args) { 
     EventBus bus = new EventBus("Sample"); 
    } 
} 

sto ottenendo questo errore:

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 

Ho provato con Guava 10.0, 11.0 e 12.0 e sempre lo stesso errore. Sono su OSX Lion e sto usando Netbeans 7.1: Ho provato sia Java 6 (32 e 64 bit) che Java 7: nessun miglioramento. Su google non riesco a trovare nulla. È un problema con Guava? Oppure, come al solito, mi manca qualcosa?

Con i migliori saluti,

Alessandro

+3

A prima vista questo sembra un errore di solito si ottiene quando si hanno diverse versioni dello stesso file jar sul classpath. – biziclop

+0

Ho appena provato su Windows con le stesse impostazioni e funziona perfettamente. Proverò a vedere se ho versioni diverse dello stesso barattolo. Ti farò sapere – Alejander

+3

Prova l'opzione della riga di comando '-verbose: class' per vedere da dove vengono effettivamente caricate le tue classi. – biziclop

risposta

17

Per espandere su ciò @biziclop detto, è molto probabile che sia una versione recente di Guava e sia google-raccoglie o una versione di Guava precedenti alla 3.0 sul classpath . Objects.firstNonNull è stato aggiunto in 3.0, il che suggerisce che venga caricata una versione precedente di quella classe.

+1

Grazie per aver menzionato le raccolte di google in questa risposta, quello era il mio problema. Escludendolo nel pom fa il trucco. – Ryan

+0

Avevo 2 versioni di guava e mi dava l'errore Objects.firstNonNull: impossibile trovare il simbolo. La rimozione di uno di questi ha corretto l'errore. –

2

Ho avuto lo stesso problema. Stavo usando google-collections 1.0 dove guava è v11. Questo problema è andato via dopo che ho aggiornato a

<!-- https://mvnrepository.com/artifact/com.google.guava/guava --> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>19.0</version> </dependency> da

<dependency> 
    <groupId>com.google.collections</groupId> 
    <artifactId>google-collections</artifactId> 
    <version>1.0</version> 
</dependency>