我正在使用Guava-05-snapshot和Sun的JDK 1.6 代码爆炸执行此代码段:
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>
,可写数组和排序的创建完美无缺。但尝试将阵列转换为ImmutableList
失败。
答案 0 :(得分:45)
Guava是Google Collections的完全兼容超集 - 我们没有以不兼容的方式更改任何内容。 (这是通过对最新的番石榴罐运行整个Google Collections测试套件(扩展)来测试的。)
我相信你有一个google-collect的副本 - * .jar仍然会进入你的类路径。显式,或者因为其他jar包含它而不重新打包它。你只需要找到并删除它。
在Google Collections中,有ImmutableList.copyOf(Iterable)
方法,并且没有公开ImmutableList.copyOf(Collection)
方法。哪个没问题,因为集合也是可迭代的。在Guava中,我们添加了Collection重载。这是完全兼容的,因为用于编译的所有源代码仍然可以,并且之前编译的任何源代码仍将仅引用原始方法。
如果您针对Guava进行编译,然后针对Google Collections运行,则会出现此问题。我相信这很可能正在发生。
答案 1 :(得分:3)
使用Maven的官方(非快照)guava-r05版本,这个也对我很好。顺便说一句,这可能是做同样事情的一种更好的方式:
ImmutableList<String> sorted = Ordering.natural()
.immutableSortedCopy(Password.badWords);
答案 2 :(得分: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>
答案 3 :(得分:1)
1)从http://code.google.com/p/guava-libraries/下载guava-XX.X.X.jar 2)在eclipse中右键单击项目选择构建路径并添加此jar
答案 4 :(得分:0)
Using Guava bundled with GWT工作。
我将两个Guava Jar文件(版本13)从此处添加到我的war / WEB-INF / lib并将guava-13.0.1.jar添加到我的构建路径(右侧)点击&amp;添加到构建路径)