Tomcat 引入jar包導致的 NoClassDefFoundError 報錯的問題解決
阿新 • • 發佈:2018-12-13
問題處理
今天在慕課網上學習時用到了一個問題:在 Tomcat 下跑專案時 new SAXreader(); 方法不執行。專案執行到 SAXReader reader = new SAXReader();
時直接跳出整個方法,沒有執行後面的程式碼,且控制檯沒有報錯資訊。
我使用 Maven 構建專案,pom 檔案中的確引入了相關依賴,而且是目前最新的版本,不存在版本不相容問題。
<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
<dependency>
<groupId>dom4j</groupId >
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
我在課程下方的評論處也看見有人遇到了同樣的問題(原問題連結),然而並沒有人回答。我在 Google,Stack Overflow 也沒有找到有效的解決方法。
後來我突然想到以前手動引入 jar 包時常發生的一個問題,就是Tomcat 啟動時預設在安裝目錄下的 lib 資料夾下尋找 jar 包
,可能你將 jar 包下載到了專案目錄下,而 Tomcat 的目錄下沒有該 jar 包,那麼程式可以編譯成功,但執行時就丟擲 ClassNotFound
於是我去看了下 Tomcat 下的 lib 目錄,裡面果然沒有 dom4j 的相關 jar 包,Maven 預設將 jar 包下載到了 user 下的 .m2/repository
資料夾中,於是我把 jar 包複製過去,方法即可執行。
然而出現另外一個錯誤,發現 XStream 方法也出現了同樣的問題,於是我把 xstream.jar 和 xmlpull.jar (XStream 依賴的 jar 包)也複製了過去,結果程式執行成功。
遺留的問題
Maven 所下載的 jar 包是否可以通過配置自動複製到 Tomcat 目錄下,或者 Tomcat 啟動時是否可以增加搜尋 jar 包的位置,每次都手動的複製會造成許多不方便。