一.问题描述
最近开启学习新项目的时候报了如下的错误
java: 无法访问org.springframework.stereotype.Repository
错误的类文件: /E:/maven/apache-maven-3.6.2/repository/org/springframework/spring-context/6.0.3/spring-context-6.0.3.jar!/org/springframework/stereotype/Repository.class
类文件具有错误的版本 61.0, 应为 52.0
二.解决问题
我原来这个包的版本为3.0以上的
调整这个包的版本,调整为3.0以下,如下版本:
maven网址:maven地址
搜 spring-boot-starter-web
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.7.RELEASE</version>
</dependency>
三.探究问题根源
1.jdk版本和class文件版本的对照关系
我们都知道JDK有JDK的版本,那我们是class文件也有自己的版本,每个Java 版本都有对应的特定 Java 类文件版本号
对应关系如下:
低版本的 Java 环境中运行高版本的类文件,则会出现与上面图片描述相似的错误(类似小学刚毕业就想参加高考)。
我JDK的版本是1.8,对应class文件版本应该为52,但是,由于Spring Boot的默认版本更新为Spring Boot 3了,它需要Java17来进行编译(最小依赖Java17,即类文件版本为61),而传统的开发都基于JDK1.8,也就是只能把我们的spring-boot-starter-web包版本降低到3.0以下。
其实还有另外一种办法,就是把JDK升级到17或17以上,这个我相信很多人暂时还不会去这样做。