Исключение 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)
Кто-нибудь знает, что я здесь делаю неправильно?
Ответы
Ответ 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, если у вас есть, и попробуйте. Должен работать нормально.