[我最初是在websphere论坛上发布的,但是他没有看到及时的回复。我在这里重新发布了更多内容]
问题
我在我们的企业应用程序(即" .ear")中添加了一个jar(称之为#34; Foo.jar"),创建了清单条目等,并找到了我的意外是,当我的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
另一位开发人员告诉我&#34;你无法使用Foo.jar&#34;因为我们需要把#34; Parent_last&#34;而且目前这个项目不是一个选项。
附加背景
问题
java.lang.LinkageError:这是一个&#39;类加载器问题&#39;或者&#39;错误版本的课程&#39;问题?我对&#34;错误的课程版本的体验&#34;我经常看到的问题&#34; NoSuchMethod&#34;错误,而不是实例化异常。
还有其他方法吗?
更新
我读了一些关于共享库和#34;隔离类加载器&#34;这似乎是解决方案。但是出于某种原因,我的RAD / Eclipse用户界面似乎已被打破,因为它没有“保存”。当我将共享库与应用程序或模块关联时。它随后消失了。
提前致谢
答案 0 :(得分:1)
如果你想使用websphere中已经存在的更新的库,那么parent_last就是你要走的路
如果没有,请从应用程序中删除slf4j jar,并使用供应商提供的版本
答案 1 :(得分:0)
检查Foo.jar预期的SL4J版本和你正在使用的版本:它们肯定是不同的。确保正确的版本在您的类路径中具有优先权:您可以将它放在WEB-INF / lib中,但也检查您在WEB-INF / lib中只有一个版本。
要发现您正在使用的SL4J jar,可以运行
java -verbose:class ....
并且JVM将转储它加载的内容以及从哪里开始。
你说&#34;我经常看到NoSuchMethod错误&#34;而不是LinkageError;在这种情况下,该方法存在但具有一些其他不兼容性。