从JBoss 7.1引用依赖Jar文件时出错

时间:2012-09-25 10:34:50

标签: jboss module jboss7.x noclassdeffounderror

我根据stackoverflow问题here.中提供的说明从JBoss 7.1模块引用jar文件。我在JBoss 5.x,6.x中使用了这个jar,没有任何问题。但是,当我尝试在引用上面jar的JBoss 7.1中部署war文件时,它给出了以下错误:

15:59:19,220 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].  [/Max_client]] (MSC service thread 1-2) StandardWrapper.Throwable: java.lang
NoClassDefFoundError: org/xml/sax/SAXException
    at com.systinet.wasp.webservice.ServiceClientImpl.lookup(ServiceClientImpl.java:556) [wasp.jar:]
    at com.systinet.wasp.webservice.ServiceClientImpl.createProxy(ServiceClientImpl.java:437) [wasp.jar:]
    at org.systinet.wasp.webservice.Registry.lookup(Registry.java:168) [wasp.jar:]
    at MyServlet.init(MyServlet.java:103)   at javax.servlet.GenericServlet.init(GenericServlet.java:242) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Fi
al]
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1202) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1102) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3655) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3873) [jbossweb-7.0.13.Final.jar:]
    at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
    at  org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
    at  java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_35]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_35]
    at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_35]
Caused by: java.lang.ClassNotFoundException: org.xml.sax.SAXException from [Module "commons.wasp:main" from local module loader @2adb1d4 (roots: c:\jboss-as-7.1.1
Final\modules)]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:423)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
    ... 15 more 

我对JBoss 7中的这个新模块概念非常陌生。知道这里有什么问题吗?

谢谢!

我尝试做的详情:

我希望能够在全局范围内提供此依赖关系jar。所以我所做的是创建了一个文件夹结构modules / common_libs / test / main,并在其中放置了所需的jar。然后创建模块描述符module.xml:

<module xmlns="urn:jboss:module:1.1" name="common_libs.test">
    <resources>
        <resource-root path="test.jar"/>
    </resources>
</module>

然后在我需要访问此jar的应用程序中,我在MANIFEST.MF中添加了:

Dependencies: common_libs.test

该应用程序是一个war文件,我将其部署在部署文件夹下,并创建了一个.war.dodeploy文件。当我启动JBoss服务器时,我得到了这个异常。

任何想法,任何人?

谢谢!

2 个答案:

答案 0 :(得分:3)

您需要查看模块所需的依赖项。使用当前的错误消息,它看起来需要依赖SAX。您应该将javax.api(这是SAX所在的模块)的依赖项添加到您的module.xml。

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="common_libs.test">
    <resources>
        <resource-root path="test.jar"/>
    </resources>

    <dependencies>
        <module name="javax.api"/>
    </dependencies>
</module>

您需要为共享库所需的任何依赖项添加依赖项。

答案 1 :(得分:1)

在你的module.xml中添加对javax.api的依赖,它应该可以工作。

正如您所提到的,您对此模块概念不熟悉。我们在做什么的解释很少。 使用JBoss AS7x archietecture,我们使用模块为我们的应用程序提供jar /类。其中一个原因是它减轻了战争。

我们为我们的jar创建模块,module.xml是一个描述符,充当模块的ID / bio,告诉服务器其中的内容<resources> tag

以及该模块所依赖的内容 <dependencies>代码

对于我们所有的模块,我们在javax.api上添加依赖项,以便模块可以编译。为什么?不记得要留意它。当你知道它时添加为评论。

希望这会有所帮助: - )