我在JBoss 4.3-eap上使用捆绑的战争,jar和配置文件(.properties文件)部署耳朵时遇到问题。这是我的耳朵结构:
+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.jar
和tag.jar
),则突然无法再找到属性文件(目前,它们位于lib/classes
,所以,我希望无论如何,它们都被类加载器选中。理想情况下我想把类放在它自己的目录中并将它分别添加到类路径中,但是现在我只是想做这项工作)。
我尝试了其他一些操作,包括手动将core.jar
添加到war的manifest.mf
文件中,将UseJBossWebLoader
更改为jboss-service.xml
文件下的jboss-web.deployer
文件以及上述的各种组合,都没有成功。我要么从类路径(classes
文件夹)中丢失lib
目录,并且没有拾取任何属性文件,要么战争无法从jar访问正确的类。我认为必定有一些错误的配置,虽然我已经尝试过阅读JBoss进行EAR部署和类加载的方式,但我似乎无法将其改编为我当前的设置。
任何建议都将不胜感激。
以下是我一直关注的一些网站:
Raible Designs JBoss ClassLoader Logic
这些只是我看过的几个网站。问题可能源于项目的设置,因为这是一个大型已建立的项目(在某种程度上)从weblogic部署迁移到Jboss。因此,如果有什么应该工作,但没有,那么它可能是某些代码/项目配置的问题。不幸的是,我还不知道是否存在与JBoss相关的问题或项目问题。
答案 0 :(得分:10)
<library-directory>
中的application.xml
标记是JavaEE5的一个特性,我不认为JBoss 4.3完全符合JavaEE5(它可以做EJB3,是的,但它只是部分支持)。
所以你需要回到使用显式声明的JAR文件:
<module>
<java>lib/core.jar</java>
</module>
对于属性文件,您需要添加它们作为java模块的目录,因此对于您的示例:
<module>
<java>lib/classes</java>
</module>