无法访问org.springframework.context.annotation.Bean 错误的类文件:类文件具有错误的版本 61.0, 应为 52.0 请删除该文件或确保该文件位于正确的类路径子目录中。

Spring Framework 6和SpringBoot 3不再支持Java 8,最低版本为JDK 17,请升级JDK >= 17,同时IDEA >= 2021.2,Tomcat >= 10
长期使用的Java 8,这次报错一直切换Spring依赖版本,没想到是Java太旧了,而且IDEA小于2021.2版本也不支持Java 17

来源

SpringSecurity教程的源码,本地打开,各种依赖报错

image

Error:(6, 46) java: 无法访问org.springframework.context.annotation.Bean
  错误的类文件: /D:/Maven/MyMavenRepository/org/springframework/spring-context/6.0.10/spring-context-6.0.10.jar!/org/springframework/context/annotation/Bean.class
    类文件具有错误的版本 61.0, 应为 52.0
    请删除该文件或确保该文件位于正确的类路径子目录中。

pom.xml文件如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>BookManage</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>BookManage</name>
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.target>17</maven.compiler.target>
        <maven.compiler.source>17</maven.compiler.source>
        <junit.version>5.9.2</junit.version>
    </properties>

    <dependencies>
        ...
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.10</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>6.0.10</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>6.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>6.1.1</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.13</version>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.0.31</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>3.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>6.0.10</version>
        </dependency>
        ...
</project>

分析

提示版本错误就更换Spring版本,从Spring 6.0.10更换为Spring 5.2.x,结果还是不行,按照提示在文件夹中删掉依赖,结果IDEA提示类名找到不依赖,也没有导入提示

解决

搜索报错,参考以下链接,原因是Spring 6和SpringBoot 3不再支持Java 8,最低版本Java 17,升级Java 17

java - 错误“类文件的版本错误61.0,应该是52.0”,同时将spring-data-mongodb从3.3.4升级到4.0.0 - 堆栈溢出 (stackoverflow.com)

java - 类文件的版本错误 61.0,应该是 52.0 - 堆栈溢出 (stackoverflow.com)

Spring Framework

Spring 使创建 Java 企业应用程序变得容易。 它提供了在企业环境中使用 Java 语言所需的一切,支持 Groovy 和 Kotlin 作为 JVM 上的替代语言,并且可以根据应用程序的需求灵活地创建多种架构。 从 Spring Framework 6.0 开始,Spring 需要 Java 17+。

Spring Boot

Spring Boot 3.1.2 需要 Java 17,并且兼容 Java 20(包括 Java 20)。还需要 Spring Framework 6.0.11 或更高版本。

为以下构建工具提供显式构建支持:

Build Tool Version
Maven 3.6.3 or later
Gradle 7.x (7.5 or later) and 8.x

Spring Boot 支持以下嵌入式 servlet 容器:

Name Servlet Version
Tomcat 10.1 6.0
Jetty 11.0 5.0
Undertow 2.3 6.0

Spring Boot 可以与“经典”Java 开发工具一起使用,也可以作为命令行工具安装。 无论哪种方式,您都需要 Java SDK v17 或更高版本。 在开始之前,您应该使用以下命令检查当前的 Java 安装:

$ java -version

同时Tomcat升级到10

Tomcat 10 及以上版本的用户应该注意,作为 Java EE 向 Eclipse 基金会转移的一部分,从 Java EE 迁移到 Jakarta EE 的结果是,所有已实现 API 的主包已从 更改为 . 这几乎肯定需要更改代码以使应用程序能够从 Tomcat 9 及更早版本迁移到 Tomcat 10 及更高版本。 已经开发了一个迁移工具来帮助此过程。javax.jakarta.

新的问题

下载好Java 17,IDEA启动又报错,搜索原因是当前IDEA版本不支持Java 17,参考支持的 Java 版本和功能 |IntelliJ IDEA 文档 (jetbrains.com)

Error:Cannot determine path to 'tools.jar' library for 17 (D:\Java\jdk-17.0.8)

除了安装新版本IDEA,另外一个办法,使用Open JDK,适用 Amazon Corretto 11 - Amazon Corretto 的下载包,参考java - 无法确定 18 的“tools.jar”库的路径(C:/Program Files/jdk-18.0.1.1) - 堆栈溢出 (stackoverflow.com)

最后结果是更新Java 17、Tomcat 10,下载IDEA 2023,项目启动成功

posted @ 2023-08-01 16:49  蔚然丶丶  阅读(489)  评论(0编辑  收藏  举报