web-dev-qa-db-fra.com

Exception NoSuchMethodError lors de l'utilisation de com.google.common.base.Splitter

J'essaie d'utiliser com.google.common.base.Splitter comme suit

Iterable<String> segs = Splitter.on("/").split("one/two/three/four/five");

for (String seg : segs) {
  System.out.println(seg);
}

Cependant, je vois l'exception suivante:

Exception in thread "main" 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:664)
    at com.google.common.base.CharMatcher.<clinit>(CharMatcher.Java:71)
    at com.google.common.base.Splitter.<init>(Splitter.Java:107)
    at com.google.common.base.Splitter.on(Splitter.Java:171)
    at Test.main(Test.Java:30)

Est-ce que quelqu'un a une idée de ce que je fais mal ici?

18
mip

J'ai rencontré le même problème. Il s'est avéré que j'ai utilisé une version plus ancienne de goyave. Accéder à ce site: https://code.google.com/p/guava-libraries/ , et téléchargez une version plus récente.

À propos, Google Collection a été renommé en goyave.

9
Sam003

Utilisez la dépendance ci-dessous pour résoudre le problème

Pour ajouter une dépendance à Guava en utilisant Maven, utilisez ce qui suit:

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>19.0</version>
</dependency>

Pour ajouter une dépendance à l'aide de Gradle:

dependencies {
  compile 'com.google.guava:guava:19.0'
}
8
Indrajeet Gour

Votre problème est qu'une autre bibliothèque peut également contenir une bibliothèque de goyave et qu'elle est chargée en premier à partir de votre chemin de classe au lieu de la version souhaitée. Cela provoquerait cette exception d'exécution.

2
Kurtymckurt

Pour moi, cela se produit lorsque vous avez une dépendance qui dépend d'une version antérieure de Guava et que cette dépendance est répertoriée en premier. La goyave sera résolue à l'endroit où elle a été trouvée en premier et ignore le reste.

La solution consiste à ajouter d'abord la dépendance à la goyave, mais en veillant à ce qu'elle ne rompt pas avec les autres projets utilisant de la goyave.

0
smac89

Il existe 2 versions: 1) com.google.guava: guava: 26.0-Android 2) com.google.guava: guava: 26.0-jre. Très probablement, vous attribuez la mauvaise version comme dans mon cas

0
Andrew Glukhoff

Cela se produit également si la bibliothèque GSON est importée avant la bibliothèque Guava.

Voir: https://github.com/google/guava/issues/2786

J'importais les pots d'un dossier dans IntelliJ. Ce qui a fini par fonctionner a été d’ajouter un "z" à côté de gson (pour que le bocal soit nommé zgson) afin que Guava puisse importer en premier. 

0
n4rush0