JBoss: WAR файл в EAR не может найти JAR-библиотеку на пути к классам
У меня возникла проблема с развертыванием уха со связанными войнами, баночками и файлами конфигурации (файлы .properties) на JBoss 4.3-eap. Вот моя структура уха:
+app.ear
+lib
*.jar libraries that the war 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>
My 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
folder/classpath. Если я попытаюсь разогнать первые два модуля для добавления первых партийных библиотек (core.jar
и tag.jar
), внезапно файлы свойств больше не могут быть найдены (они теперь находятся в lib/classes
, так что, надеюсь, в любом случае, они подхватываются загрузчиком классов. В идеале я бы хотел поместить классы в свой собственный каталог и добавить его в classpath отдельно, но пока я просто пытаюсь выполнить эту работу).
Я пробовал другие вещи, в том числе вручную добавляя core.jar
в файл war manifest.mf
, меняя UseJBossWebLoader
на true в файле jboss-service.xml
под jboss-web.deployer
и различные комбинации выше, на нет успеха. Я либо теряю каталог classes
из пути к классам (папка lib
), и ни один из моих файлов свойств не подбирается, или война не может получить доступ к соответствующему классу из банки. Я думаю, что должна быть некоторая конфигурация, которая является неправильной, и, хотя я пробовал читать информацию о том, как JBoss делает развертывание EAR и загрузку классов, я не могу приспособить его к моей текущей настройке.
Любые предложения были бы весьма признательны.
Вот некоторые сайты, на которые я смотрел:
Raible Designs Логика JBoss ClassLoader
Это лишь некоторые из сайтов, на которые я смотрел. Проблемы могут возникнуть и при настройке проекта, так как это крупный проект, который (в какой-то мере) переносится из развертывания weblogic в Jboss. Поэтому, если есть что-то, что ДОЛЖНО работать, но это не так, это может быть проблемой с некоторой конфигурацией кода/проекта. К сожалению, я пока не могу сказать, могу ли я сказать, связана ли его проблема с JBoss или проблема с проектом.
Ответы
Ответ 1
Тег <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>