2011-01-19 50 views
15

我想將我的Java EE6 web類(bean,過濾器,servlet)打包成jar,並將它與其他實用程序jar一起放入/WEB-INF/lib/目錄中,並放棄/WEB-INF/classes/目錄完全。/WEB-INF/classes vs/WEB-INF/lib

在類加載,應用程序上下文等方面,兩者之間是否存在實質性差異?

謝謝。 PS:每當使用任何java規格搜索時,我總是被重定向到Oracle文檔索引,這是離原始URL十幾次點擊。任何人都知道那裏發生了什麼?

回答

19

我會去找/WEB-INF/classes。它允許您在調試模式下運行應用程序,並在更改時運行熱插拔類。如果你把所有東西都打包成一個jar包,那麼每當你改變一個類時,你都必須重新打包和重新部署應用程序。

+0

謝謝。但是,除了調試之外,它在功能上應該是相同的應用程序嗎? – Osw 2011-01-19 18:59:23

+1

是的。沒有區別 – Bozho 2011-01-19 19:00:43

14

好,不久:假設你有org.example.Test.class類,如果你把它放到罐子和WEB-INF/lib/目錄,同一個類複製到WEB-INF/classes/那麼該應用程序將使用最後一個(從WEB-INF/classes/)的類加載器。

有時你可以使用它作爲優勢 - 我有一個庫,它有一個bug ...我尋找該類的源代碼(其中的錯誤是;我錯過了我如何知道該錯誤的一部分這是另一個故事),我用固定代碼將該類添加到項目中,並將其編譯爲WEB-INF/classes/,而庫仍存在於WEB-INF/lib/中。固定類將被使用,直到圖書館將被修復。

0

在Tomcat Servlet容器的定義中:WEB-INF\classesWEB-INF\lib之前被搜索。您可以選擇將您的類加載委派給您的自定義類加載器 - 即使這樣,上面的命令也會保留。

如果您選擇與其他供應商合作,例如JBOss,Glassfish,Jetty可能會有不同的順序,但我不確定這些。