2011-07-01 48 views
2

我想添加一些依賴項jar文件。但是,將這些文件放在lib/endorsedWEB_INF/lib.jar中會導致jboss實例啓動錯誤。我想這是因爲JBoss的平坦的類加載器結構。如果有人已經jboss-web.xml實現的類加載器設置JBoss - War庫依賴關係

<class-loading> 
     <loader-repository>com.example:archive=unique-archive-name</loader-repository> 
</class-loading> 

有人可以給我一個現實生活中的例子嗎?

而且我應該在哪裏放置這些jar文件 - 的JBoss lib/endorsed,或lib文件夾中的部署文件夾或WEB_INF/lib

回答

2

他們屬於在WEB-INF/lib目錄WAR文件的目錄。不要把東西放在背書夾裏。

5

Duffymo關於不放罐子的指令支持在您的危險中被忽略。

在一些額外的細節:

庫放入您的WEB-INF/lib目錄是便攜性和一致性的最佳做法,因爲它堅持創造自給自足和分配網絡檔案館的標準條款,但您需要密切關注類加載聲明,您將其放入jboss-web.xml

假設一個簡單的場景沒有類加載聲明和一個虛構的example.jar

  • 如果你把example.jarWEB-INF/lib目錄它確實不是也存在於jboss // lib,然後example.jar只對特定的WAR可見。
  • 如果你把example.jarWEB-INF/lib目錄確實也存在於的JBoss // LIB,在WEB-INF /實例LIB將主要被忽略,WAR將使用JBoss服務器實例的統一類加載器加載示例類,其中jboss // lib/example.jar。 (這同樣適用於在同一服務器實例的任何其他戰爭或耳朵,假設沒有類加載覆蓋。)

類加載聲明的情況下(如),您需要有兩個不同版本的example.jar: - jboss // lib:example1.0。罐子 - WEB-INF/lib目錄下:example2.0.jar

在這種情況下,JBoss會爲您的WAR一個獨特的和孤立的類加載器,這將避免在有利於的JBoss // LIB/example1.0.jar在WAR的上下文中,使用WEB-INF/lib/example2.0.jar的

總之,如果你只運行在JBoss服務器實例一個WAR和/或你有沒有衝突的JAR問題,溝類加載聲明,並把你的JAR在的JBoss // LIB。它使得WAR文件更加輕量,整體部署可能會更簡單,並且在熱部署期間不會消耗更多內存和額外的類版本。

+0

+1爲有用的描述。 – ziggy