JBoss:EAR 中的 WAR 文件在类路径上找不到 JAR 库

2022-09-04 03:53:53

我在 JBoss 4.3-eap 上部署带有捆绑的 wars、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应用程序中有以下内容.xml:

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

我的应用程序.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>

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

我尝试了其他一些事情,包括手动添加到战争文件中,在文件下更改为true,以及上述各种组合,但没有成功。我要么丢失了classpath(文件夹)中的目录,并且没有一个属性文件被拾取,要么战争无法从jar中访问正确的类。我认为一定有一些配置是错误的,虽然我已经尝试阅读JBoss进行EAR部署和类加载的方式,但我似乎无法使其适应我当前的设置。core.jarmanifest.mfUseJBossWebLoaderjboss-service.xmljboss-web.deployerclasseslib

任何建议将不胜感激。

以下是我一直在看的一些网站:
Raible Designs JBoss ClassLoader Logic

这些只是我看过的几个网站。问题也可能源于项目的设置,因为这是一个大型的已建立项目,(在某种程度上)从Weblogic部署迁移到Jboss。因此,如果有任何应该工作但不起作用的东西,那可能是某些代码/项目配置的问题。不幸的是,我还没有达到我能判断这是JBoss相关问题还是项目问题的地步。


答案 1

标记是 JavaEE5 特性,我不认为 JBoss 4.3 完全符合 JavaEE5(它可以执行 EJB3,是的,但它只是部分支持)。<library-directory>application.xml

因此,您需要返回使用显式声明的 JAR 文件:

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

至于你的属性文件,你需要将它们所在的目录添加为java模块,所以对于你的示例:

<module>
    <java>lib/classes</java>
</module>

答案 2

推荐