Mam problem z rozmieszczeniem ucha z dołączonymi wojnami, słoikami i plikami konfiguracyjnymi (pliki .properties) w JBoss 4.3-eap. Tu jest mój struktury ucha:JBoss: Plik WAR w pliku EAR nie może znaleźć biblioteki JAR w ścieżce klasy
+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
Mam następujących w moim jboss-app.xml:
<jboss-app>
<jmx-name>app.startup.JbossStartUpServer:service=JbossStartUpService</jmx-name>
</jboss-app>
Moja application.xml wygląda następująco:
<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>
Zasadniczo, po wdrażając ucho, napotykam problem, w którym jedna z moich wojen nie może znaleźć klasy w pliku core.jar
(java.lang.NoClassDefFoundErro
r). Myślę, że dzieje się tak dlatego, że wojna nie znajduje tej biblioteki, mimo że znajduje się w folderze/classpath lib
. Jeśli spróbuję odkomentować pierwsze dwa moduły, aby dodać biblioteki pierwszej strony (core.jar
i tag.jar
), nagle nie można już znaleźć plików właściwości (znajdują się one na razie w lib/classes
, więc mam nadzieję, że tak czy inaczej są one pobierane przez program ładujący klasy: najlepiej byłoby umieścić klasy we własnym katalogu i dodać je osobno do klasy, ale na razie próbuję to zrobić).
Próbowałem kilka innych rzeczy, w tym ręcznie dodając core.jar
do wojny manifest.mf
pliku, zmieniając UseJBossWebLoader
true w pliku jboss-service.xml
pod jboss-web.deployer
i różne kombinacje powyższych, aby bez powodzenia. Albo zgubię katalog classes
z folderu classpath (katalog lib
) i żaden z moich plików właściwości nie zostanie pobrany, albo wojna nie może uzyskać dostępu do odpowiedniej klasy ze słoika. Myślę, że musi być jakaś konfiguracja, która jest zła, i podczas gdy ja próbowałem czytać na temat sposobu, w jaki JBoss wykonuje wdrożenia i klasy EAR, nie mogę przystosować go do mojej obecnej konfiguracji.
Wszelkie sugestie będą mile widziane.
Oto kilka stron, że czekałem na:
Raible Designs JBoss ClassLoader Logic
Są to tylko niektóre z miejsc Mam spojrzał na. Problemy mogą wynikać również z konfiguracji projektu, ponieważ jest to duży, ustalony projekt, który (w pewnym zakresie) jest migrowany z wdrożenia w sieci WWW do Jboss. Więc jeśli jest coś, co POWINNO działać, ale nie działa, może to być problem z niektórymi konfiguracjami kodu/projektu. Niestety, nie jestem jeszcze w punkcie, w którym mogę stwierdzić, czy jest to problem związany z JBoss, czy problem z projektem.
To rozwiązało mój problem! Wielkie dzięki! Chciałbym jednak zadać pytanie uzupełniające: jeśli dodaję te moduły do pliku application.xml, czy to oznacza, że nie potrzebuję właściwości path-class w plikach manifest.mf wojen?Czy jest tak tylko w przypadku, gdy ustawiam atrybut UseJBossWebLoader w jboss-web.deployer na true? – Mike
Nie jestem pewien co do oczywistego problemu, sam tego nie próbowałem, zawsze polegam na domyślnym spłaszczonym programie ładującym klasy. Jeśli chodzi o formatowanie, nie używaj znaczników core/pre, nie działają one zbyt dobrze. Użyj ikon formatowania w edytorze. – skaffman