JBoss: WAR-файл в EAR не может найти библиотеку JAR по пути к классам - PullRequest
14 голосов
/ 25 августа 2009

У меня проблема с развертыванием уха с комплектными войнами, банками и файлами конфигурации (.properties) на JBoss 4.3-eap. Вот структура моего уха:

+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 / classpath. Если я попытаюсь раскомментировать первые два модуля, чтобы добавить библиотеки сторонних разработчиков (core.jar и tag.jar), внезапно файлы свойств больше не будут найдены (на данный момент они находятся в lib/classes, так что, надеюсь, в любом случае, они будут подхвачены загрузчиком классов. В идеале я хотел бы поместить классы в отдельный каталог и добавить их в путь к классам отдельно, но сейчас я просто пытаюсь заставить это работать).

Я пробовал некоторые другие вещи, включая ручное добавление core.jar в файл manifest.mf войны, изменение UseJBossWebLoader на true в файле jboss-service.xml в jboss-web.deployer и различные комбинации вышеупомянутого, чтобы нет успеха Я либо потеряю каталог classes из classpath (lib папка), и ни один из моих файлов свойств не будет найден, или война не сможет получить доступ к нужному классу из фляги. Я думаю, что должна быть какая-то конфигурация, которая является неправильной, и хотя я пытался прочитать о том, как JBoss выполняет развертывание EAR и загрузку классов, я не могу адаптировать его к моей текущей установке.

Любые предложения будут с благодарностью.

Вот несколько сайтов, на которые я смотрел:
Raible Designs JBoss ClassLoader Logic

Это всего лишь несколько сайтов, на которые я смотрел. Проблемы могут быть связаны с настройкой проекта, так как это большой установленный проект, который (в некоторой степени) переносится из развертывания в сети на Jboss. Так что если есть что-то, что ДОЛЖНО работать, но не работает, это может быть проблемой с некоторыми настройками кода / проекта. К сожалению, я еще не дошел до того, что могу определить, связана ли это с проблемой JBoss или с проектом.

1 Ответ

10 голосов
/ 26 августа 2009

Тег <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>
...