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

Tomcat 啟動失敗 `NoClassDefFoundError: WebApplicationContext`?經典三步驟:清部署、釋記憶體、重啟大法

     編輯:程式設計綜合問答

錯誤堆疊核心:

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

這不是 Tomcat 本體壞了,而是Web 應用類別載入器找不到 Spring 核心類。常見誘因:

  1. 部署專案過多導致 Metaspace/PermGen 耗盡,類別卸載失敗,後續載入崩潰。
  2. 專案 `WEB-INF/lib` 缺少 `spring-web.jar`,或版本衝突(多個 Spring 版本共存)。
  3. Maven 依賴範圍錯誤:`spring-web` 標記為 `provided` 卻未在 Tomcat `lib` 目錄放置。

標準排查與修復流程

  1. 停止 Tomcat,刪除 `work/Catalina/localhost`、`temp`、`webapps` 下舊專案目錄與 `.war`。
  2. 檢查專案 `pom.xml`: 確認 `spring-web`、`spring-context` 為 `compile` 範圍,且版本統一 (如 `5.3.x`)。
  3. 調大 JVM 記憶體: `set CATALINA_OPTS=-Xms512m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m` (Windows 用 `setenv.bat`,Linux 用 `setenv.sh`)。
  4. 乾淨重建: `mvn clean package -DskipTests` 產出新 WAR,放入 `webapps`,啟動觀察日誌。

進階診斷:若仍失敗

  • 啟動時加 `-verbose:class` 觀察 `WebApplicationContext` 由哪個 JAR 載入。
  • 執行 `mvn dependency:tree | grep spring-web` 排查傳遞性依賴衝突。
  • 懷疑 JAR 損壞:刪除 `~/.m2/repository/org/springframework/spring-web` 強制重新下載。

口訣:清部署、調記憶體、對依賴、重啟——解決 90% Tomcat 啟動疑難雜症。

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