如何使用刚发布的JDK22构建SpringBoot 3.2.3应用?
使用JDK22构建Spring Boot 3.2.3项目失败的解决办法
问题背景
尝试用JDK22构建Spring Boot 3.2.3项目时,执行mvn clean install报错失败,核心错误信息为:
Unsupported class file major version 66
该错误由spring-boot-maven-plugin:3.2.3的repackage目标抛出,根源是Spring Boot 3.2.3依赖的ASM版本不支持JDK22对应的类文件版本(版本号66)。
解决方案
方案1:升级Spring Boot到支持JDK22的版本
Spring Boot从3.2.4版本开始正式支持JDK22,直接修改pom.xml中的父项目版本即可:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.4</version> <!-- 或更高兼容版本 --> <relativePath/> </parent> <properties> <java.version>22</java.version> <!-- 同步将Java版本改为22 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
修改后重新执行mvn clean install即可正常构建。
方案2:不升级Spring Boot,调整编译配置
若暂时不想升级Spring Boot,可保持3.2.3版本,但配置Maven用JDK22编译,同时将目标字节码版本设为Spring Boot 3.2.x支持的JDK21,需显式配置maven-compiler-plugin:
<properties> <java.version>21</java.version> <maven.compiler.source>22</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.12.1</version> <!-- 使用支持JDK22的编译器版本 --> <configuration> <source>22</source> <target>21</target> <release>21</release> <!-- 确保生成兼容JDK21的字节码 --> </configuration> </plugin> <!-- 保留原有插件配置 --> <plugin> <groupId>org.graalvm.buildtools</groupId> <artifactId>native-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
此方式下,项目用JDK22编译,但生成的字节码兼容JDK21,Spring Boot插件可正常处理。
方案3:手动升级ASM依赖(不推荐)
可在pom.xml中强制升级ASM到支持JDK22的版本(如9.6+),但可能引发Spring Boot内部组件兼容性问题,仅作临时应急方案:
<dependencyManagement> <dependencies> <dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm</artifactId> <version>9.6</version> </dependency> <dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm-commons</artifactId> <version>9.6</version> </dependency> <dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm-tree</artifactId> <version>9.6</version> </dependency> </dependencies> </dependencyManagement>
内容的提问来源于stack exchange,提问作者PatPanda
相关产品推荐
相关产品推荐

