[我最初将其发布在 websphere 论坛机器人上,但没有看到及时的回复。我在这里重新发布,内容稍微多一点]
问题
我向企业应用程序(即“.ear”)添加了一个 jar(称为“Foo.jar”),创建了 list 条目等,令我惊讶的是,当我的 EJB 实例化 FooClient 时,websphere 在 org.slf4j.LoggerFactory 上抛出了 java.lang.LinkageError
我已经在跟踪中添加了类加载器调试,但没有发现太多。我希望看到“WAS 实际上在哪里找到 slf4j 类”。以下是条目:
[9/24/14 16:23:01:417 CDT] 00000067 CompoundClass > loadClass org.slf4j.LoggerFactory this=com.ibm.ws.classloader.CompoundClassLoader@5c2687e4[app:yourappServer] Entry
[9/24/14 16:23:01:418 CDT] 00000067 CompoundClass < loadClass org.slf4j.LoggerFactory java.lang.LinkageError: org.slf4j.LoggerFactory Exit
我检查了我的 was8 目录,发现了 slf4j jar 的各种副本/版本。
/plugins
/osgiappbundles/com.ibm.ws.osgi.applications/aries/slf4j-api-1.5.6.jar
/slf4j-api-1.5.6.jar
/profiles/AppSrv01
/installedConnectors/activemq-rar-5.9.1.rar/slf4j-api-1.7.5.jar
/wstemp
/appdepl14769b0c2de/slf4j-api-1.7.5.jar3472682177251273594.tmp
/appdepl14769b0c2de/slf4j-api-1.7.5.jar7922145899030561292.tmp
另一位开发人员告诉我“你将无法使用 Foo.jar”,因为我们需要放置“Parent_last”,而目前该项目还没有这个选项。
其他上下文
- Websphere 8.0.0.7
- RAD 9
问题
java.lang.LinkageError:这是“类加载器问题”还是“类版本错误”问题?根据我对“类版本错误”问题的经验,我通常会看到“NoSuchMethod”错误,而不是实例化异常。
还有其他办法解决这个问题吗?
更新
我读了一些有关共享库和“隔离类加载器”的内容,这似乎是解决方案。然而,由于某种原因,我的 RAD/Eclipse UI 似乎已损坏,因为当我将共享库与应用程序或模块关联时,它不会“保存”。随后它就消失了。
提前致谢
最佳答案
如果您想使用 websphere 中已有的较新库,parent_last 是最佳选择
如果没有,请从应用程序中删除 slf4j jar,并使用供应商提供的版本
关于java - 加载 slf4j LoggerFactory 时,websphere 类加载器给出 java.lang.LinkageError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26042322/