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

Tomcat 啟動報錯排查:從日誌定位核心異常

     編輯:程式設計綜合問答

日誌關鍵信息提取

提供的日誌中關鍵異常堆疊:

Caused by: java.lang.NoClassDefFoundError: org/springframework/web/context/WebApplicationContext
...
Caused by: java.lang.ClassNotFoundException: org.springframework.web.context.WebApplicationContext

核心判斷:Spring 核心包缺失或版本衝突

WebApplicationContext 位於 spring-web.jar 中。ClassNotFoundException 說明 Tomcat 類加載器找不到該類,常見原因:

  1. 專案未正確部署 Spring Web 依賴:Maven/Gradle 依賴範圍設置為 provided 或 test,導致打包時未放入 WEB-INF/lib。
  2. 多版本 Spring 共存:WEB-INF/lib 下同時存在 spring-web-4.x.jar 和 spring-web-5.x.jar,類加載器載入錯誤版本。
  3. Tomcat 共享類庫衝突:$CATALINA_HOME/lib 下放了 Spring 相關 jar,與應用內部版本不一致,導致父子類加載器衝突。
  4. 部署腳本/IDE 配置問題:Eclipse/IDEA 發布時未勾選 "Deploy dependencies",或 Maven war 插件配置錯誤。

排查驗證步驟

  1. 檢查 WEB-INF/lib:解壓 WAR 或查看部署目錄,確認 spring-web-.jar 存在且唯一。
  2. 執行 mvn dependency:tree:查看依賴傳遞,確保 spring-web 為 compile 範圍。
  3. 清理 Tomcat 工作目錄:刪除 work/Catalina/localhost/ 下對應應用目錄,防止舊類緩存干擾。
  4. 檢查 $CATALINA_HOME/lib:除非有特殊理由,不要將應用級 jar 放入此處。

針對「管理 MySQL 報錯」的說明

日誌開頭的 APR 库警告(The APR based Apache Tomcat Native library ... was not found)不影響啟動,僅影響高併發性能。可忽略或安裝 tcnative 解決。

最佳實踐建議

  • 使用 Maven/Gradle 管理依賴,避免手動複製 jar。
  • Spring Boot 專案直接打包為可執行 WAR/JAR,內嵌容器避免版本衝突。
  • 生產環境部署前,在測試環境完整驗證啟動流程。

參考資源

類似問題分析:Tomcat 啟動 ClassNotFoundException 排查

總結

Tomcat 啟動失敗核心異常為 ClassNotFoundException: org.springframework.web.context.WebApplicationContext。請優先檢查應用 WEB-INF/lib 中 spring-web.jar 是否存在、版本是否唯一、依賴範圍是否正確。清理工作目錄並重新部署通常即可解決。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved