網頁

2018/6/4

Eclipse Maven build java.lang.ClassNotFoundException問題

當你在Eclipse啟動在Tomcat上運行的Maven專案時,在啟動過程中如果出現了java.lang.ClassNotFoundException: 某個library的類別名稱,則可能是因為Tomcat找不到那個依賴的library。

主要原因就是Tomcat實際上是去執行部屬(deploy)在WEB-INF/classes目錄下的class檔,並使用WEB-INF/lib目錄下的jar檔,但有時不知道為什麼建置Maven專案的時候Maven dependency的jar不會被部屬到WEB-INF/lib下,所以造成在啟動時Tomcat找不到依賴的jar,所以就找不到類別,因此出現java.lang.ClassNotFoundException的錯誤。

解決方法是在專案上點選右鍵 -> Properties -> Deployment Assembly,在這邊可以看到有哪些Source被部屬到指定的Deploy Path,通常/src下的java檔會被編譯成class檔並部屬到WEB-INF/classes下。
而/webapp的部屬路徑為環境根目錄/。在這邊點選Add...,選擇Java Build Path Entries,選擇Maven Dependencies,將Maven dependencies加入並部屬到WEB-INF/lib即可。

這是問題發生的過程是我使用TortoiseSVN將maven web專案checkout下來後,再用Eclipse的File -> Import -> Maven -> Existing Maven Projects來匯入成為專案,或許是這樣一些Eclipse和Maven關係的設定並不包含在其中,所以要透過上述的手動進行設定。

只能說eclipse在碰到maven的時候,常有類似這種建置上的問題,要不然就是Project Facets的一些問題會莫名出現。


參考:

沒有留言:

張貼留言