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

Spring 啟動報 TypeMismatchException 與 UnsupportedClassVersionError 51.0 根因分析

     編輯:程式設計綜合問答

錯誤關鍵訊息

org.springframework.beans.TypeMismatchException: Failed to convert property value ... to required type 'java.lang.Class' for property 'mapperInterface'
Caused by: java.lang.UnsupportedClassVersionError: com/luckeys/dao/ActivityDao : Unsupported major.minor version 51.0

版本號對照表

Major VersionJava 版本
51.0Java 7
52.0Java 8
55.0Java 11
61.0Java 17

根因

ActivityDao.class 以 Java 7 編譯(version 51.0),但運行環境為 Java 6 或更低,導致類載入器拒絕載入。Spring 嘗試將字串屬性 mapperInterface 轉換為 Class 型別時觸發 ClassUtils.resolveClassName,進而載入該類別,拋出 UnsupportedClassVersionError,包裝為 TypeMismatchException。

解決步驟

  1. 統一 JDK 版本:編譯、打包、部署、運行全部使用相同主版本(建議 Java 8+)。
  2. Maven 編譯插件指定版本:
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
  3. Tomcat/Jetty 啟動腳本確認 JAVA_HOME 指向正確 JDK。
  4. 清理本地倉庫:mvn dependency:purge-local-repository 移除舊版編譯產物。

為何 Eclipse 內運行正常?

Eclipse 專案建置路徑使用工作區 JDK(通常較新),而打包 WAR 部署到外部 Tomcat 可能使用系統預設舊 JDK,導致版本不一致。

總結

UnsupportedClassVersionError 51.0 = 類別檔案為 Java 7 編譯,運行環境需 JDK 7+。統一版本即可解決。

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