任何人都可以解釋從Tomcat中的lib目錄加載jar文件的順序嗎? 它是否按字母順序排列?隨機?或者其他一些命令?從lib目錄加載jar文件的順序
回答
全部描述在Tomcat's ClassLoading HOW-TO。這不一定是按字母順序。如果你觀察到這種行爲,那麼如果你打算讓你的web應用程序跨服務器移動,它應該被依賴於絕對不是。例如,Tomcat 6「巧合」地命令它,但Tomcat 8不會。
概述的,加載順序如下:
- 引導/系統(
JRE/lib
,然後server.loader
) - web應用庫(
WEB-INF/classes
,然後WEB-INF/lib
) - 公共庫(
common.loader
,然後Tomcat/lib
) - webapp-shared libraries(
shared.loader
)
如果你想保證JAR X之後 JARŸ加載,那麼你需要把JAR X中出現上述列表中後的地方之一。
但也有例外然而,這是在tomcat docs
最後提到,Web應用程序的類加載器總是首先委託爲被Tomcat(的Servlet,JSP,EL,WebSocket的實施規範JavaEE的API類)。 Tomcat中的所有其他類加載器都遵循通常的代理模式。
這意味着如果webapp包含任何JavaEE類(javax.*
),那麼它將被tomcat忽略。
對於每個加載器,只要JVM按照需要導入/執行並且尚未加載的順序,這些類就會按順序加載。
實際上,它是按字母順序排列! (在一個特定的目錄,如「lib」目錄下,原來的海報提及。)
更確切地說,如果你看一下源爲Tomcat 6,在FileDirContext
類,文件的陣列上list()
調用Arrays.sort()
方法找到的罐子名稱。
我也手動測試過。我用一個叫做HelloWorld.getGreeting()
的JSP創建了一場戰爭,並將兩個幾乎完全相同的包含HelloWorld
的版本的jar放到WEB-INF/lib目錄中。一個說「你好,世界」,另一個說「再見,殘酷的世界」。
如果我將「Hello,world」版本的a.jar和「goodbye」版本的b.jar命名爲,並重新啓動Tomcat,則會顯示「Hello」文本。如果我用另一個方式命名罐子並重新啓動Tomcat,我會得到「Goodbye」文本。
據我已經能夠確定,這種行爲是沒有記錄,沒有指定,不應該依靠。但現在是按字母順序排列的。
我完全同意BalusC提供的答案。僅指向添加是指從各個類加載器加載JAR時,它會檢查字母順序。
我有一種情況在我的web應用程序中加載「XSSFWorkbook」以從Excel表格讀取數據,並且有兩個JARS「poi-ooxml-3.9.jar」和「org.eclipse.birt.runtime_4.3.1.v20130918- 1142.jar「,具有相同的類名和包結構。我只是將它的後面的字母順序重新排列,並且它爲我提供了一個技巧。只是想分享一樣。
好運
訂購WEb-INF/lib文件夾中已加載的罐子。
對於tomcat 5-7,訂單是按字母順序的。它使用排序。
對於tomcat 8是隨機決定的底層文件系統。
你正在接聽或問一個新問題嗎? – 2014-10-30 00:24:22
猜一猜:)。我在回答。 – user2193008 2014-11-04 15:51:42
請花些時間重新格式化您的答案,以使其看起來像一個答案。看看[如何寫出一個好答案](http://stackoverflow.com/help/how-to-answer),看看如何改進你的答案。 – 2014-11-04 16:00:03
- 1. Tomcat中的jar文件7 lib目錄
- 2. lib目錄中jar文件的位置
- 3. Rails的LIB加載順序
- 4. 從與jar文件相同的目錄加載log4j2.xml文件
- 5. 從與jar文件相同的目錄加載文件
- 6. jBoss 4.2.3:在\ server \ default \ lib里加載jar的順序是什麼
- 7. Magento:如何從lib目錄加載js文件?
- 8. 從jar或目錄加載時文件的行爲不同
- 9. 如何加載項目lib文件夾中的jar文件中的彈簧豆
- 10. 從.war文件加載類的順序
- 11. 從web-inf \ lib \ *代碼文件加載jar
- 12. 如何從jar或目錄加載類
- 13. Java從jar加載文件
- 14. 在Grails項目lib目錄中找不到jar文件
- 15. 從項目目錄加載XML文件
- 16. 無法加載這樣的文件位於lib目錄中
- 17. Gradle多項目和lib jar目錄
- 18. 使用Trinidad(JRuby和RoR 3)時從lib目錄中重新加載jar
- 19. 如何從jar文件中加載.wav文件,而沒有與jar文件相同的目錄中的資源
- 20. Maven - Jar中lib目錄中的依賴項文件夾
- 21. 從插件目錄加載文件
- 22. 如何更改從WEB-INF/lib加載的Jars的順序?
- 23. 無法從jar文件加載文件
- 24. 在Tomcat上以特定順序加載Jar文件6
- 25. 定製Tomcat Realm和Lib目錄中的JAR的整個負載
- 26. 的Java - 運行JAR拒絕加載文件在同一目錄
- 27. 如何動態加載目錄中的所有jar文件?
- 28. 在WAR文件的lib目錄中包含源JAR(Web應用程序)
- 29. 無法從lib文件夾加載類
- 30. 從jar加載xslt文件加載jar本身,而不是xslt
類似:http://stackoverflow.com/q/8364619/435605 – 2015-02-24 09:43:15