2009-08-25 73 views
13

我在JBoss 4.3-eap上部署带有捆绑战争,jar和配置文件(.properties文件)的耳朵时出现问题。这里是我的耳朵结构:JBoss:EAR中的WAR文件无法在类路径上找到JAR库

+app.ear 
    +lib 
    *.jar libraries that the war's use 
    +classes 
     *.properties and other configuration files 
    +META-INF 
    application.xml 
    jbos-app.xml 
    app.war 
    app2.war 
    appn.war 

我已经在我的jboss-app.xml的以下内容:

<jboss-app> 
    <jmx-name>app.startup.JbossStartUpServer:service=JbossStartUpService</jmx-name> 
</jboss-app>  

我的application.xml如下:

<application id="app_id"> 
    <display-name>App>/display-name> 
    <description>TheApp>/description> 
<!-- 
    <module id="core"> 
    <java>lib/core.jar</java> 
    </module> 

    <module id="tag"> 
    <java>lib/tag.jar</java> 
    </module> 
--> 
    <module id="app"> 
    <web> 
     <web-uri>app.war</web-uri> 
     <context-root>/</context-root> 
    </web> 
    </module> 

    <module id="app2"> 
    <web> 
     <web-uri>app2.war</web-uri> 
     <context-root>/app2</context-root> 
    </web> 
    </module> 

    <module id="appn"> 
    <web> 
     <web-uri>appn.war</web-uri> 
     <context-root>/appn</context-root> 
    </web> 
    </module> 

    <security-role id="secRole"> 
    <description>users</description> 
    <role-name id="appRoleName">users</role-name> 
    </security-role> 

    <library-directory>lib</library-directory> 

</application> 

基本上,在部署耳朵,我遇到了一个问题,我的战争之一找不到core.jar文件(java.lang.NoClassDefFoundErro r)中的课程。我认为这是由于战争没有找到这个库,尽管它在lib文件夹/类路径中。如果我尝试取消注释前两个模块以添加第一方库(core.jartag.jar),突然间找不到属性文件(它们现在位于lib/classes,所以我希望无论如何,它们被类加载器拾取,理想情况下,我想将类放在自己的目录中并分别添加到类路径中,但现在我只是试图使其工作)。

我已经尝试了一些其他的东西,包括手动添加core.jar战争的manifest.mf文件,在jboss-web.deployer改变UseJBossWebLoader为true在jboss-service.xml文件,以及上述的各种组合,没有成功。我要么丢失类路径中的classes目录(lib文件夹),我的任何属性文件都不会被拾取,或者战争无法从jar中访问正确的类。我认为必须有一些配置是错误的,尽管我已经尝试阅读JBoss进行EAR部署和类加载的方式,但我似乎无法将其适用于当前的设置。

任何建议将不胜感激。

这里有一些网站,我一直在寻找:
Raible Designs JBoss ClassLoader Logic

这些都只是一些我看过的所有网站。这些问题也可能源于项目的设置,因为这是一个大规模的项目,在一定程度上从weblogic部署迁移到Jboss。所以,如果有什么应该工作,但没有,这可能是一些代码/项目配置的问题。不幸的是,我还没有确定它是JBoss相关问题还是项目问题。

回答

10

application.xml中的标记是JavaEE5的一个特性,我不认为JBoss 4.3完全符合JavaEE5规范(它可以执行EJB3,是的,但它只是部分支持)。

所以,你需要重新使用显式声明的JAR文件:

<module> 
    <java>lib/core.jar</java> 
</module> 

至于你的属性文件,你需要添加它们是作为一个Java模块的目录,所以你的榜样:

<module> 
    <java>lib/classes</java> 
</module> 
+0

这解决了我的问题!非常感谢!我想问一个后续问题,如果我将这些模块添加到application.xml中,这是否意味着我不需要战争中的manifest.mf文件中的类路径属性?或者,如果我将jboss-web.deployer中的UseJBossWebLoader属性设置为true,那么情况就是这样吗? – Mike 2009-08-26 13:38:03

+0

我不确定明显的问题,我没有尝试过自己,我总是依靠默认的扁平类加载器。至于你的格式,不要使用core/pre标签,它们不能很好地工作。使用编辑器中的格式图标。 – skaffman 2009-08-26 14:09:38

相关问题