类文件具有错误的版本 61.0, 应为 52.0 请删除该文件或确保该文件位于正确的类路径子目录中。

一、异常描述

[ERROR] /Users/****/src/main/java/com/wn/mockito/controller/AccountController.java:[5,52] 无法访问org.springframework.beans.factory.annotation.Autowired
  错误的类文件: /Users/***/repository/org/springframework/spring-beans/6.1.10/spring-beans-6.1.10.jar(org/springframework/beans/factory/annotation/Autowired.class)
    类文件具有错误的版本 61.0, 应为 52.0
    请删除该文件或确保该文件位于正确的类路径子目录中。
    
无法访问org.springframework.stereotype.Controller

二、问题分析

用户遇到的问题是类文件版本不兼容。具体错误信息指出类文件版本为 61.0,而应为 52.0。

三、可能原因

  1. JDK 版本不匹配:项目使用的 JDK 版本与 Spring 依赖的版本不兼容。
  2. 依赖版本冲突:项目中引入了不兼容的 Spring 版本。

四、解决方案

1.检查 JDK 版本:

Java 的 JDK 版本与类文件的 major version 对应关系如下:

JDK 版本 Major Version
JDK 1.0 45
JDK 1.1 45
JDK 1.2 46
JDK 1.3 47
JDK 1.4 48
JDK 5.0 49
JDK 6 50
JDK 7 51
JDK 8 52
JDK 9 53
JDK 10 54
JDK 11 55
JDK 12 56
JDK 13 57
JDK 14 58
JDK 15 59
JDK 16 60
JDK 17 61
JDK 18 62
JDK 19 63
JDK 20 64
JDK 21 65

例如我的项目使用的是 JDK 8

 wn@wndeMBP ~ % Java -version 
 
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)

确保项目使用的 JDK 版本与 Spring 依赖的版本兼容。

  • JDK 8 对应版本 52.0
  • JDK 17 对应版本 61.0

如果项目使用的是 JDK 8,但引入了 JDK 17 对应的 Spring 版本,会导致版本不兼容。

详细说明

  • Major Version 是 Java 类文件格式的一部分,用于标识类文件的版本。
  • 每个 JDK 版本都会生成特定 major version 的类文件。
  • 如果一个类文件的 major version 与当前运行的 JDK 版本不匹配,会导致类文件加载失败。

确保你的项目使用的 JDK 版本与生成的类文件的 major version 匹配。

2.调整 Spring Boot 版本

Spring Boot 与 JDK 版本的对应关系如下:

Spring Boot 版本 支持的 JDK 版本
Spring Boot 3.x JDK 17 及以上
Spring Boot 2.x JDK 8 及以上
Spring Boot 1.x JDK 6 及以上

详细说明

  1. Spring Boot 3.x

    • 最低支持 JDK 17。
    • 推荐使用 JDK 17 或更高版本,如 JDK 18、JDK 19 等。
    • 充分利用 JDK 17 的新特性,如密封类(Sealed Classes)、模式匹配(Pattern Matching)等。
  2. Spring Boot 2.x

    • 最低支持 JDK 8。
    • 推荐使用 JDK 8 或更高版本,如 JDK 11、JDK 17 等。
    • 充分利用 JDK 8 的新特性,如 Lambda 表达式、Stream API 等。
  3. Spring Boot 1.x

    • 最低支持 JDK 6。
    • 推荐使用 JDK 8。
    • 对 JDK 8 的支持有限。

示例

如果你使用的是 JDK 8,推荐使用 Spring Boot 2.x:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.4</version>
</parent>

如果你使用的是 JDK 17,推荐使用 Spring Boot 3.x:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.0.0</version>
</parent>

确保你的项目使用的 JDK 版本与引入的 Spring Boot 版本兼容。

3.调整 Spring 版本:

确保引入的 Spring 版本与项目使用的 JDK 版本兼容。

Spring 框架与 JDK 版本的对应关系如下:

Spring 版本 支持的 JDK 版本
Spring 6.x JDK 17 及以上
Spring 5.x JDK 8 及以上
Spring 4.x JDK 6 及以上
Spring 3.x JDK 5 及以上

详细说明

  1. Spring 6.x

    • 最低支持 JDK 17。
    • 推荐使用 JDK 17 或更高版本,如 JDK 18、JDK 19 等。
    • 充分利用 JDK 17 的新特性,如密封类(Sealed Classes)、模式匹配(Pattern Matching)等。
  2. Spring 5.x

    • 最低支持 JDK 8。
    • 推荐使用 JDK 8 或更高版本,如 JDK 11、JDK 17 等。
    • 充分利用 JDK 8 的新特性,如 Lambda 表达式、Stream API 等。
  3. Spring 4.x

    • 最低支持 JDK 6。
    • 推荐使用 JDK 8。
    • 对 JDK 8 的新特性有部分支持,但可能需要额外配置。
  4. Spring 3.x

    • 最低支持 JDK 5。
    • 推荐使用 JDK 6 或 JDK 7。
    • 对 JDK 8 的支持有限。
    <!-- 我原来引用,这个支持jdk17 -->
   <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-context</artifactId>
       <version>6.1.10</version>
   </dependency>
    <!-- 修改后引用,这个支持jdk8 ,问题解决-->
   <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-context</artifactId>
       <version>5.3.19</version>
   </dependency>

五、总结

确保项目使用的 JDK 版本与引入的 Spring、Spring Boot 版本兼容

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 19:20:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 19:20:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 19:20:03       58 阅读
  4. Python语言-面向对象

    2024-07-19 19:20:03       69 阅读

热门阅读

  1. OpenCV——图像与视频的读取

    2024-07-19 19:20:03       19 阅读
  2. 物理设计基础概念 —— Pin

    2024-07-19 19:20:03       18 阅读
  3. 机器学习之对比学习MoCo

    2024-07-19 19:20:03       19 阅读
  4. tcp(7) — Linux Programmer‘s Manual

    2024-07-19 19:20:03       16 阅读
  5. 开放开源开先河(三)

    2024-07-19 19:20:03       19 阅读
  6. cnn-resnet实现代码

    2024-07-19 19:20:03       21 阅读
  7. 基于Qsetting的ini类

    2024-07-19 19:20:03       19 阅读
  8. redhat 7服务管理

    2024-07-19 19:20:03       17 阅读
  9. Hystrix参数踩坑

    2024-07-19 19:20:03       22 阅读
  10. redis消息队列

    2024-07-19 19:20:03       15 阅读