JDOM+Jaxen+websphere7=java.lang.NoClassDefFoundError:org.Jaxen.BaseXPath

JDOM+Jaxen+websphere7=java.lang.NoClassDefFoundError:org.Jaxen.BaseXPath,websphere,classpath,jdom,Websphere,Classpath,Jdom,我想在Webapp项目中使用JDOM。这个很好用。但是现在我想使用XPath添加一些东西,但是如果我尝试使用XPath,我只会得到一个例外: com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0068E: Uncaught exception created in one of the service methods of the servlet MyServlet in application MyProjectEAR. Ex

我想在Webapp项目中使用JDOM。这个很好用。但是现在我想使用XPath添加一些东西,但是如果我尝试使用XPath,我只会得到一个例外:

com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0068E: Uncaught exception created in one of the service methods of the servlet MyServlet in application MyProjectEAR. Exception created : java.lang.NoClassDefFoundError: org.jaxen.BaseXPath
    at java.lang.J9VMInternals.verifyImpl(Native Method)
    at java.lang.J9VMInternals.verify(J9VMInternals.java:72)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:134)
    at java.lang.Class.forNameImpl(Native Method)
    at java.lang.Class.forName(Class.java:136)
    at org.jdom.xpath.XPath.newInstance(XPath.java:126)
    at org.jdom.xpath.XPath.selectNodes(XPath.java:337)
    [..]

Caused by: java.lang.ClassNotFoundException: org.jaxen.BaseXPath
    at java.net.URLClassLoader.findClass(URLClassLoader.java:421)
    at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:150)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:652)
    at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:90)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:618)
    at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62)
    at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58)
    at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:540)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:618)
    ... 35 more
jar在我的类路径中,org.jaxen.BaseXPath类就在那里。为什么Websphere找不到它?它适用于我在那里的所有其他库。当我在谷歌上搜索时发现,有人说他在某个地方有一个冲突的版本,我应该确保我的web应用程序目录中的JAR具有优先权。在eclise的构建路径配置中,我将Web应用程序库设置在WebSphere库之上,现在只有src dir位于Web应用程序库之上,但这并没有改变任何事情。不幸的是,我没有真正理解关于耳朵的部分,这似乎很重要

更新:同时给了我一个新的线索。我在WebSphere的管理控制台上找到了类路径和一个包含类装入器所考虑的所有JAR的列表。这是一个相当大的数字,我用一点grep和unzip-l魔法搜索了它们,发现文件/opt/ibm/WebSphere/PortalServer/wcm/prereq.wcm/wcm/shared/app/jdom.jar包含没有jaxen内容的jdom。所以也许这个jdomjar已经加载了,但是不兼容版本中的jaxen是从我的lib目录加载的

此外,我在WebSphere的管理控制台中找到了我的应用程序的父级第一/最后一个设置,但所有内容都显示为灰色!我无法切换到父级上:-


我能做些什么来发现并解决这个问题?

你能包含更多的堆栈跟踪吗?这样我们就可以看到所涉及的类加载器层次结构了吗?你具体把相关的罐子放在哪里了?你在用RAD吗?@bkail:我更新了我上面的帖子,增加了一些堆栈跟踪和一些发现。是的,我正在使用RAD,我的JAR保存在我的应用程序WEB-INF/lib目录中。