2

我正在尝试将 Guava 用于我的项目,并且在启动 JBoss 时有很多警告:

WARN  [ClassLoaderManager] Unexpected error during load of:com.google.common.base.Equivalences$Equals: java.lang.IncompatibleClassChangeError: class com.google.common.base.Equivalences$Equals has interface com.google.common.base.Equivalence as super class
WARN  [ClassLoaderManager] Unexpected error during load of:com.google.common.base.FunctionalEquivalence: java.lang.IncompatibleClassChangeError: class com.google.common.base.FunctionalEquivalence has interface com.google.common.base.Equivalence as super class
WARN  [ClassLoaderManager] Unexpected error during load of:com.google.common.collect.AbstractMapBasedMultiset$1$1: java.lang.IllegalAccessError: class com.google.common.collect.AbstractMapBasedMultiset$1$1 cannot access its superclass com.google.common.collect.Multisets$AbstractEntry
[...]

根据我的研究,似乎与旧的 Google Collection 不兼容。community.jboss.org的这个帖子建议使用jboss-scanning.xml。我没有更改,JBoss 文档指定此文件用于过滤注释...

您是否已经遇到过这个问题?

你能提出一个解决方案吗?

4

1 回答 1

6

你是对的,谷歌收藏和番石榴不兼容,谷歌收藏主页上说得很清楚:

Guava 是旧 Google Collections Library 的完全兼容的超集。它还包括多年的错误修复、文档修复和性能修复,因此我们强烈建议您使用 Guava 而不是 Google Collections。

如果您的应用程序最终在同一个类路径上同时包含 google-collect-1.0.jar 和 guava-r##.jar,只需删除 Google Collections JAR 就可以了。如果你不删除它,它要么会导致可怕的问题(如果它出现在类路径中的番石榴之前),要么永远不会被看到(如果它出现在之后)

所以基本上:要么从类路径中删除谷歌集合,要么首先加载番石榴。

于 2012-08-03T15:31:06.157 回答