[英]Tomcat can't access jar library referenced by my library in WEB-INF/lib
我正在使用Tomcat 7開發Web應用程序。它使用放在webapps \\ MyApplication \\ WEB-INF \\ lib下的MyLib.jar。 Tomcat已成功加載此庫。 問題在於MyLib.jar需要的庫(比如A.jar和B.jar)。
在創建MyLib.jar時,我添加了帶有類路徑的MANIFEST:otherLibs \\ A.jar otherLibs \\ B.jar(放在webapps \\ MyApplication \\ WEB-INF \\ lib \\ otherLibs下)。
有趣的是,MyLib.jar可以從命令行運行而不會出現任何問題。
當我將A.jar和B.jar復制到\\ lib目錄時,這一切都適用於我。 我只是不想把它們放在那里以保持Tomcat安裝清潔。
也許我需要為MyApplication指定額外的類路徑? 也許全球為Tomcat? 那么如何? 請提供任何建議。
編輯:奇怪。 我運行了一些額外的測試。 我將MyLib.jar的類路徑更改為“A.jar B.jar”(沒有otherLibs目錄),將A.jar和B.jar放在MyLib.jar旁邊,現在它工作正常。 它適用於我,但你能告訴我為什么它不使用“otherLibs”目錄嗎?
以下是您的應用程序的最新情況(嘗試回答,您能告訴我為什么它不能與“otherLibs”目錄一起工作嗎? ):
當您從命令行運行jar時,JVM使用標准的類加載機制,即Bootstrap類加載器 - >擴展類加載器 - >應用程序類加載器 。 此應用程序類加載器從CLASSPATH
環境變量, -classpath
或-cp
命令行選項,JAR中的Manifest
文件的Class-Path
屬性加載類。 這就是它從命令行運行的原因。 更多這里 。
Server ( 如tomcat ) 類加載機制與獨立應用程序不同 。 他們使用自定義類加載 。 這就是為什么只將你的所有jar放在WEB-INF/lib
因為自定義類加載器意味着從應用程序中的WEB-INF/lib
文件夾加載jar。 很明顯,自定義類加載器不考慮JAR中Manifest
文件中的條目,因此忽略了不直接在WEB-INF/lib
所有jar。 當您在WEB-INF/lib
復制jar時,它會起作用,因為自定義類加載器無法找到它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.