Исключение NoSuchMethodError при использовании com.google.common.base.Splitter - программирование
Подтвердить что ты не робот

Исключение NoSuchMethodError при использовании com.google.common.base.Splitter

Я пытаюсь использовать com.google.common.base.Splitter следующим образом

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

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

Однако я вижу следующее исключение:

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)

Кто-нибудь знает, что я здесь делаю неправильно?

4b9b3361

Ответ 1

Я столкнулся с той же проблемой. Оказалось, что я использовал более старую версию guava. Перейдите на этот сайт: https://code.google.com/p/guava-libraries/ и загрузите более новую версию.

Кстати, google-коллекции были переименованы в Guava.

Ответ 2

Используйте эту зависимость, чтобы исправить проблему.

Чтобы добавить зависимость от Guava с помощью Maven, используйте следующее:

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

Чтобы добавить зависимость с помощью Gradle:

dependencies {
  compile 'com.google.guava:guava:19.0'
}

Ответ 3

Ваша проблема в том, что в другой библиотеке также может содержаться библиотека guava и она сначала загружается из вашего класса, а не из той версии, которую вы хотите. Это приведет к этому исключению во время выполнения.

Ответ 4

Да, это проблема только с библиотекой guava. Храните обновленную библиотеку и удалите все оставшиеся версии guava, если у вас есть, и попробуйте. Должен работать нормально.