1. 程式人生 > >Tomcat 引入jar包導致的 NoClassDefFoundError 報錯的問題解決

Tomcat 引入jar包導致的 NoClassDefFoundError 報錯的問題解決

問題處理

今天在慕課網上學習時用到了一個問題:在 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 包的位置,每次都手動的複製會造成許多不方便。