Java编译报错:无法访问jakarta.persistence.Entity,类文件版本不匹配
问题解决:字节码版本不兼容导致的Jakarta Persistence访问错误
报错原因
这个错误的核心是字节码版本不匹配:
- 52.0对应JDK 8的字节码版本,55.0对应JDK 11的字节码版本
- 你当前项目用JDK 8编译,但引入的
jakarta.persistence-api:3.1.0是基于JDK 11编译的,两者无法兼容
解决方案
1. 降低Jakarta Persistence API版本适配JDK 8
Jakarta Persistence 3.x系列开始要求JDK 11及以上,JDK 8需要使用2.x版本。修改pom.xml中的依赖:
<dependency> <groupId>jakarta.persistence</groupId> <artifactId>jakarta.persistence-api</artifactId> <version>2.2.3</version> <!-- 适配JDK8的稳定版本 --> </dependency>
如果用Spring Boot框架,注意Spring Boot 2.x才对应Jakarta Persistence 2.x,Spring Boot 3.x才支持3.x版本
2. 升级项目JDK版本到11+
如果不想改动依赖版本,直接把项目编译环境换成JDK 11:
修改pom.xml的Maven编译插件配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>11</source> <target>11</target> </configuration> </plugin> </plugins> </build>
同时要把IDE的项目JDK配置同步改成11。
3. 排查依赖树解决版本冲突
就算是从同版本项目复制的pom.xml,也可能存在间接依赖引入高版本API的情况。执行Maven命令查看依赖树:
mvn dependency:tree -Dincludes=jakarta.persistence:jakarta.persistence-api
如果发现其他依赖间接引入了3.1.0版本,就在你的依赖中添加排除规则,或者强制指定兼容版本。
内容的提问来源于stack exchange,提问作者Benjamin Roshan
相关产品推荐
相关产品推荐

