當你在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的一些問題會莫名出現。
參考:
沒有留言:
張貼留言