2010-06-27 2 views
8

Je commence juste à nous goyave à la place de Google-Collections. La classe Splitter semblait cool. Mais quand je l'utilise, comme ceci:Splitter explose sur un motif simple

private static final Pattern p = Pattern.compile(" +"); 
private static final Splitter usSplitter = Splitter.on(p).trimResults(); 

Je reçois une décharge de la pile:

java.lang.NoSuchMethodError: com.google.common.base.Platform.precomputeCharMatcher(Lcom/google/common/base/CharMatcher;)Lcom/google/common/base/CharMatcher; 
     at com.google.common.base.CharMatcher.precomputed(CharMatcher.java:662) 
     at com.google.common.base.CharMatcher.<clinit>(CharMatcher.java:69) 
     at com.google.common.base.Splitter.<init>(Splitter.java:99) 
     at com.google.common.base.Splitter.on(Splitter.java:208) 

Les javadocs ont rien à ce sujet "com.google.common.base.Platform." il est donc un peu difficile de deviner ce qui ne va pas.

Comme vous pouvez le voir, le motif est très simple.

Répondre

8

Quelle version de Goya utilisez-vous? Cela fonctionne parfaitement bien pour moi avec r05.

Editer: Il semble que le problème spécifique ici soit que vous ayez à la fois google-collections et goyave dans votre classpath runtime. Platform (une classe interne) existait dans google-collections mais n'avait pas la méthode precomputedCharMatcher. Splitter est chargé à partir du pot de goyave correctement, mais Platform est en cours de chargement à partir du pot de google-collecte.

+0

désolé, aurait dit: goyave-R05-SNAPSHOT.jar Sun 1.6 sur JDK Ubuntu 10.04 Je me sers R05 aussi, mais sa ne fonctionne pas du tout. – fishtoprecords

+0

Il y a un non-snapshot r05 sur la page des téléchargements de Guava et disponible aussi dans Maven ... essayez ça. – ColinD

+2

Je n'ai jamais entendu parler d'un "guava-r05-SNAPSHOT". –

13

Le java.lang.NoSuchMethodError vous indique que la méthode souhaitée est manquante dans l'exécution actuelle classpath alors qu'il était là dans le classpath de compilation . En d'autres termes, pour résoudre ce problème, vous devez aligner votre chemin d'accès à la classe d'exécution pour avoir la version correcte de l'API que vous avez utilisée pendant la compilation. Il peut également être provoqué en ayant différentes versions de la bibliothèque mélangées tout au long du chemin de classe d'exécution. Nettoyez ensuite le classpath.

+5

Bien sûr, la détection de ce problème est légèrement compliquée par le fait que les premières versions de goyave - * .jar étaient appelées google-collect - *. Jar! –

3

En fait. vous avez deux versions de la classe com.google.common.base.Platform et l'une de ces classes a ou n'a pas la méthode.

Essayez de supprimer l'un des fichiers jar. Je suggère d'enlever google-collections.jar et laisser gauva.jar.

Cela fonctionnera bien.