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

SSH 整合報錯:Java 8 + Spring 3 導致 asm ClassReader 非法參數異常

     編輯:Java 綜合教學

SSH 整合報錯:Java 8 + Spring 3 導致 asm ClassReader 非法參數異常

異常堆棧

Unable to instantiate Action, xxAction, defined for 'xxAction_login' in namespace '/'null
com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:316)

java.lang.IllegalArgumentException
    at org.springframework.asm.ClassReader.(Unknown Source)

根因分析

Spring 3.x 內嵌的 org.springframework.asm 僅支持 Java 7 字節碼格式。Java 8 編譯的類文件(主版本號 52)無法被 Spring 3 的 ASM 解析,導致 ClassReader 拋出 IllegalArgumentException。

兩種解決方案

方案一:升級 Spring 4.x+(推薦)

Spring 4 完全支持 Java 8 字節碼。修改 pom.xml:

<spring.version>4.3.25.RELEASE</spring.version>  <!-- 或 5.x -->

注意:Spring 4/5 包結構變化(如 org.springframework.asm 移至獨立模塊),需同步調整導入。

方案二:降級 JDK 至 1.7(快速止血)

IntelliJ IDEA 設置:

  1. File → Project Structure → Project
  2. Project SDK 選擇 1.7
  3. Project language level 選擇 7

Maven 編譯插件同步設置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
    </configuration>
</plugin>

避坑指南

  • 新項目直接選 Spring 5 + Java 11/17,避免版本不兼容
  • 維護老項目若無法升級 Spring,鎖定 JDK 7 編譯運行
  • 排查類似異常時,關注 asm、cglib、javassist 等字節碼操作庫版本
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved