首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

SpringMVC Tomcat 啟動報錯:NoClassDefFoundError CommodityMapper

     編輯:程式設計疑難解答

錯誤堆疊關鍵訊息

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'commodityController'
...
Caused by: java.lang.NoClassDefFoundError: Lcom/ronhan/ctoc/dao/CommodityMapper;
Caused by: java.lang.ClassNotFoundException: com.ronhan.ctoc.dao.CommodityMapper

問題分析

Spring 容器啟動時嘗試向 commodityController 注入 CommodityMapper 依賴,但類別載入器找不到該類別。NoClassDefFoundError 配合 ClassNotFoundException 明確指出:編譯時存在、執行時缺失。

常見原因排查清單

  1. MyBatis Mapper 接口未被掃描:檢查 mapperLocations 或 basePackage 配置是否包含 com.ronhan.ctoc.dao。
  2. 編譯輸出目錄缺少該類別:target/classes/com/ronhan/ctoc/dao/CommodityMapper.class 是否存在?嘗試 mvn clean compile 或 IDE 重新建置。
  3. 依賴模組未打包進 WAR:若 Mapper 在獨立模組,確認該模組已列入 pom.xml 依賴且 scope 非 provided。
  4. IDE 專案設定問題:IntelliJ IDEA 中 Project Structure → Modules → Dependencies 勾選該模組 Export;Eclipse/MyEclipse 中 Deployment Assembly 確保模組輸出包含在 WAR 中。
  5. Tomcat 發佈路徑舊快取:刪除 wtpwebapps 或 webapps 下舊專案資料夾,清理 Tomcat work 目錄後重新部署。

樓主解決經驗

最終發現是 IDEA Project Facets → Utility Module 勾選狀態導致模組未正確輸出至 WAR。取消勾選或調整 Facet 設定後重新部署即正常。

最佳實踐建議

  • 使用 mvn clean package 命令列打包驗證 WAR 內容:jar -tf target/xxx.war | grep CommodityMapper。
  • 統一用 Maven 管理多模組依賴,避免 IDE 專案設定差異導致部署不一致。
  • 啟動前檢查 Tomcat 部署目錄 WEB-INF/classes 確認關鍵類別確實存在。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved