解决无法访问org.springframework.boot.SpringApplication,类文件具有错误的版本xxx, 应为xxx,请删除该文件或确保该文件位于正确的类路径子目录中。

1. 复现错误


今天在启动项目,却报出如下错误:

在这里插入图片描述

Error:(3, 32) java: 无法访问org.springframework.boot.SpringApplication
  错误的类文件: /C:/Users/zxy/.m2/repository/org/springframework/boot/spring-boot/3.1.0/spring-boot-3.1.0.jar!/org/springframework/boot/SpringApplication.class
    类文件具有错误的版本 61.0, 应为 52.0
    请删除该文件或确保该文件位于正确的类路径子目录中。

2. 分析错误


报错信息中,所说的(错误的)类文件版本指的是java class file version

根据上述报错信息的路径/C:/Users/zxy/.m2/repository/org/springframework/boot/spring-boot/3.1.0/spring-boot-3.1.0.jar,找到/spring-boot-3.1.0.jar,如下图所示:

在这里插入图片描述

复制spring-boot-3.1.0.jar到桌面,同时解压该jar包为spring-boot-3.1.0文件夹:

在这里插入图片描述

打开spring-boot-3.1.0文件夹,找到org\springframework\boot目录,使用Windows PowerShell进入到该目录下:

在这里插入图片描述

如果你还未安装Windows PowerShell,可以点击在Windows上安装powershell教程

我们使用javap -v SpringApplication.class查看SpringApplication.class的类文件版本号。

但在查看之前,需要增加Windows PowerShell缓冲区大小。

右击Windows PowerShell的屏幕左上角,选择属性,找到布局,选择屏幕缓冲区大小的高度,如下图所示:

在这里插入图片描述

默认的缓冲区大小为3000,我设置了9000

因为SpringApplication.class的类文件信息的字节数,超过了默认的缓冲区大小,无法查看完整的类文件信息。

使用javap -v SpringApplication.class查看SpringApplication.class的类文件版本号,如下图所示:

在这里插入图片描述

从图中可以看出,SpringApplication.class类文件版本为61,对应java的版本是17

查看我的jdk版本,如下图所示:

在这里插入图片描述

我的jdk版本是8,而我的SpringApplication类文件需要的jdk17

因而,我的jdk版本太低,只能降低SpringApplication的版本,来适配我的jdk的版本。

java类文件版本号与jdk版本号存在对应的关系,比如61.0对应jdk1752.0对应jdk8

完整对应关系如下表格所示:

Java版本号 java类文件版本
20 64
19 63
18 62
17 61
16 60
15 59
14 58
13 57
12 56
11 55
10 54
9 53
8 52
7 51
6 50
5 49
1.4 48
1.3 47
1.2 46
1.1 45
1.0.2 45

完整对应关系可参见: The class File Format

3. 解决错误


由于我的jdk版本是8,无法支持所需jdk17SpringApplication

因而,只能降低SpringApplication的版本,来适配我的jdk的版本。

我们修改SpringApplication的版本,只需要修改pom.xml文件中的<parent>标签下的<version>值即可。

我原来的spring boot<parent>标签下的<version>3.1.0,如下代码所示:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.1.0</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

现将<parent>标签下的<version>修改为2.6.0

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.0</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

在这里插入图片描述

查看<parent>标签下的<version>2.6.0版本的SpringApplication.class

找到C:\Users\你的电脑名字\.m2\repository\org\springframework\boot\spring-boot\2.6.0目录下的spring-boot-2.6.0.jar包,复复制到桌面,并解压为spring-boot-2.6.0文件夹。

Windows PowerShell中,使用cd C:\Users\zxy\Desktop\spring-boot-2.6.0\org\springframework\boot命令,进入到spring-boot-2.6.0文件夹下,执行如下命令:

在这里插入图片描述

<parent>标签下的<version>2.6.0版本的SpringApplication.class类文件版本为52,对应jdk的版本是8,符合我目前安装的jdk版本。

此时,重新启动项目,即可成功运行,如下图所示:

在这里插入图片描述

4. 错误总结


一般报出这个错误:无法访问org.springframework.boot.SpringApplication,类文件具有错误的版本xxx, 应为xxx,请删除该文件或确保该文件位于正确的类路径子目录中。

原因是你的spring boot的版本和你的jdk版本不一致造成的,解决办法如下:

  1. 修改你的jdk版本,去适配你的spring boot版本,这个一般不可能。

  2. 修改你的spring boot版本,适配你的jdk版本,经常采用这种方法。

猜你喜欢

转载自blog.csdn.net/lvoelife/article/details/130942659