Исключение NoSuchMethodError при использовании com.google.common.base.Splitter - PullRequest
21 голосов
/ 24 ноября 2011

Я пытаюсь использовать 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)

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

Ответы [ 7 ]

10 голосов
/ 23 апреля 2014

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

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

8 голосов
/ 07 сентября 2016

Используйте приведенную ниже зависимость для решения проблемы

Чтобы добавить зависимость от 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'
}
2 голосов
/ 17 июня 2013

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

0 голосов
/ 13 августа 2018

Существует 2 версии: 1) com.google.guava: guava: 26.0-android 2) com.google.guava: guava: 26.0-jre.Скорее всего, вы назначаете неверную версию, как в моем случае

0 голосов
/ 28 июня 2018

Для меня это происходит, когда у вас есть зависимость, которая зависит от более ранней версии Guava, и эта зависимость указана первой.Гуава будет разрешена в том месте, где она была найдена первой, и проигнорирует все остальные.

Исправление состоит в том, чтобы сначала добавить зависимость от гуавы, но будьте осторожны, чтобы не нарушить другие проекты, использующие гуаву

0 голосов
/ 15 июня 2018

Другая причина, по которой это происходит, заключается в том, что библиотека GSON импортируется до библиотеки Guava.

См: https://github.com/google/guava/issues/2786

Я импортировал банки из папки в IntelliJ. В итоге получилось добавить «z» рядом с gson (чтобы jar назывался zgson), чтобы Guava импортировал первым.

0 голосов
/ 01 октября 2014

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

...