9

在我的项目中,我同时使用 glassfish-embedded 3.1.1 和 guava lib...问题是 glassfish 带有番石榴的旧实现(即 google-collections)...

这会在运行时导致 NoSuchMethodError,例如使用 Lists.reverse() 或稍后在 guava 中引入的 Sets.newIdentityHashSet() 时。

我没有找到任何解决方案来解决这个问题......(唯一的方法是手动丢弃 glassfish jar 中的 com/google 类目录......)

4

3 回答 3

7

您可以通过指定以下内容来克服这个问题。阅读类加载器章节的委托部分。

<class-loader delegate="false" />

检查此 SO 帖子以了解 Java EE 应用程序中的类加载:Java EE 类加载标准

于 2011-09-30T16:19:44.890 回答
4

Glassfish 不应该在自己的 jar 中包含 com.google 类。那是一个错误。

更新[@sly7_7]:glassfish 似乎不再在自己的 jar 中包含番石榴,但这取决于番石榴工件。这应该可以解决问题。感谢@JagWire 指出这一点。

于 2011-10-01T01:42:44.783 回答
0

通过使用以下 Glassfish v4 构建,我能够消除错误:

http://grepcode.com/snapshot/maven.java.net/content/groups/promoted/org.glassfish.main.extras/glassfish-embedded-all/4.0.1-b01

可能值得一看。

于 2014-02-20T21:23:46.303 回答