33

我正在使用带有 Sun 的 JDK 1.6 的 Guava-05-snapshot 代码在执行此代码段时会爆炸:

List<String> badpasswords = Lists.newArrayList( Password.badWords);
Collections.sort(badpasswords);
ImmutableList<String> tmp = ImmutableList.copyOf(badpasswords);

特别是在 ImmutableList.copyOf() 调用上。此代码使用旧的 Google-Collections 代码已经工作了几个月。

java.lang.NoSuchMethodError: com.google.common.collect.ImmutableList.copyOf(Ljava/util/Collection;)Lcom/google/common/collect/ImmutableList;

Password.badWords是一个ImmutableSet<String>可写数组的创建和排序工作完美。但是尝试将 Array 转换为ImmutableList失败。

4

5 回答 5

46

Guava 是完全兼容的 Google Collections 超集——我们没有以不兼容的方式更改任何内容。(这是通过针对最新的 guava jar 运行整个 Google Collections 测试套件(广泛的)来测试的。)

我相信您仍然有一份 google-collect-*.jar 的副本进入您的类路径。要么是明确的,要么是因为其他一些 jar 包含它而没有重新打包它。你只需要找到它并删除它。

在 Google Collections 中,有一个ImmutableList.copyOf(Iterable)方法,没有公共ImmutableList.copyOf(Collection)方法。这很好,因为集合也是可迭代的。在 Guava 中,我们添加了 Collection 重载。这是完全兼容的,因为所有用于编译的源代码仍然可以,并且任何先前编译的源代码仍将简单地引用原始方法。

如果您针对 Guava 进行编译,然后针对 Google Collections 运行,则会出现问题。我相信这很可能是正在发生的事情。

于 2010-06-27T15:25:50.597 回答
4

适用于我使用来自 Maven 的官方(非快照)guava-r05 版本。顺便说一句,这可能是做同样事情的更好方法:

ImmutableList<String> sorted = Ordering.natural()
    .immutableSortedCopy(Password.badWords);
于 2010-06-27T04:29:34.067 回答
2

如果在将Web应用程序部署到WebLogic 12c时出现错误(但guava JAR在WEB-INF/lib中),weblogic.xml中的以下配置将有助于解决它:

<container-descriptor>
    <prefer-application-packages>
        <package-name>com.google</package-name>
    </prefer-application-packages>
</container-descriptor>
于 2014-05-06T16:12:45.843 回答
1

1) 从http://code.google.com/p/guava-libraries/下载 guava-XX.XXjar 2) 在 Eclipse 中右键单击项目选择构建路径并添加此 jar

于 2014-04-03T13:11:54.497 回答
0

使用与 GWT 捆绑在一起的 Guava 是可行的

我从这里 code.google.com/p/guava-libraries 添加了两个 Guava Jar 文件(版本 13)到我的 war/WEB-INF/lib 并将 guava-13.0.1.jar 添加到我的构建路径中(右键单击并添加建立路径)

于 2012-10-29T05:17:43.073 回答