24

我正在尝试按如下方式使用 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)

有谁知道我在这里做错了什么?

4

7 回答 7

10

我遇到了同样的问题。原来我使用的是旧版本的番石榴。访问此网站:https ://code.google.com/p/guava-libraries/并下载更新版本。

顺便说一句,google-collections 被重命名为 Guava。

于 2014-04-23T19:19:11.430 回答
9

使用以下依赖项来解决问题

要使用 Maven 添加对 Guava 的依赖项,请使用以下命令:

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

要使用 Gradle 添加依赖项:

dependencies {
  compile 'com.google.guava:guava:19.0'
}
于 2016-09-07T06:44:13.953 回答
2

您的问题是另一个库也可能包含一个番石榴库,并且首先从您的类路径而不是您想要的版本加载它。这将导致此运行时异常。

于 2013-06-17T18:16:57.103 回答
0

有 2 个版本:1) com.google.guava:guava:26.0-android 2) com.google.guava:guava:26.0-jre 。最有可能的是,您分配了错误的版本,就像我的情况一样

于 2018-08-13T14:51:19.173 回答
0

发生这种情况的另一个原因是如果 GSON 库是在 Guava 库之前导入的。

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

我正在将 jar 从文件夹导入 IntelliJ。最终的工作是在 gson 旁边添加一个“z”(因此 jar 将被命名为 zgson),以便首先导入 Guava。

于 2018-06-14T21:51:06.930 回答
0

对我来说,当你有一个依赖于早期版本的 Guava 的依赖项时,就会发生这种情况,并且首先列出了这个依赖项。Guava 将在首先找到的地方解决,忽略其余部分。

解决方法是先添加对 guava 的依赖,但要注意不要破坏其他使用 guava 的项目

于 2018-06-28T20:01:48.797 回答
-2

是的,这只是番石榴库的问题。保留更新的库并删除所有剩余版本的番石榴(如果有的话)并尝试。应该可以正常工作。

于 2014-10-01T16:34:28.790 回答