如何处理类路径冲突

时间:2011-09-30 16:03:07

标签: java glassfish guava glassfish-embedded

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

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

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

3 个答案:

答案 0 :(得分:6)

您可以通过以下方式克服此问题。阅读Delegation section of the Class Loaders chapter.

<class-loader delegate="false" />

检查此SO帖子,以便在Java EE应用程序中加载类:Java EE class loading standard

答案 1 :(得分:4)

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

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

答案 2 :(得分:0)

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

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

可能值得一看。