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

Spring Tomcat 啟動報錯 Context initialization failed 根因分析與解決

     編輯:程式設計綜合問答

錯誤堆疊核心訊息

java.lang.IllegalArgumentException
 at org.springframework.asm.ClassReader.<init>(Unknown Source)
 at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:52)
 at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:130)
...

根因:Spring ASM 與 JDK 版本不兼容

org.springframework.asm.ClassReader 是 Spring 內嵌的字節碼解析庫(基於 ASM)。異常 IllegalArgumentException 通常因:

  • JDK 版本過新(如 JDK 9+),類文件版本(major version)超出嵌入 ASM 版本支援範圍。
  • 專案依賴傳遞導致多版本 Spring 共存,舊版 ASM 被優先載入。
  • 編譯目標版本(maven.compiler.target)高於運行時 Spring 版本支援上限。

版本對應關係表

Spring 版本內嵌 ASM 版本支援最高 JDK
3.2.x3.3.1JDK 7 (class 51.0)
4.0.x - 4.3.x5.0.xJDK 8 (class 52.0)
5.0.x - 5.2.x7.0 - 7.1JDK 10 (class 54.0)
5.3+ / Spring Boot 2.4+9.0+JDK 17 (class 61.0)

解決方案(按優先級)

  1. 升級 Spring Framework 至支援當前 JDK 的版本(推薦 Spring 5.3+ / Spring Boot 2.5+)。
  2. 降級編譯目標版本:在 pom.xml 設定 <maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target>,確保生成 class 版本 ≤ 52.0。
  3. 排除傳遞依賴中的舊版 Spring:
    <dependency>
      <groupId>some.thirdparty</groupId>
      <artifactId>artifact</artifactId>
      <exclusions>
        <exclusion><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></exclusion>
      </exclusions>
    </dependency>
  4. 檢查類文件版本:javap -verbose MyClass.class | findstr "major",major version 52=JDK8, 55=JDK11, 61=JDK17。
  5. 清理緩存重建:mvn clean install -U 或 IDE Invalidate Caches / Restart。

進階排查

若升級 Spring 後仍報錯,啟用 -verbose:class 觀察 ClassReader 載入路徑,確認是否仍有舊版 spring-core 被類加載器讀取。使用 mvn dependency:tree | grep spring 檢查依賴衝突。

總結

「Context initialization failed」伴隨 asm.ClassReader.IllegalArgumentException 幾乎 100% 為版本不匹配。核心對策:Spring 版本 ≥ JDK 版本要求,或 編譯版本 ≤ Spring 支援上限。

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