簡體   English   中英

Tomcat無法訪問WEB-INF / lib中我的庫引用的jar庫

[英]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”目錄一起工作嗎? ):

  1. 當您從命令行運行jar時,JVM使用標准的類加載機制,即Bootstrap類加載器 - >擴展類加載器 - >應用程序類加載器 應用程序類加載CLASSPATH環境變量, -classpath-cp命令行選項,JAR中的Manifest文件的Class-Path屬性加載類。 這就是它從命令行運行的原因。 更多這里

  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM