Java 17升级至21后出现UnsupportedClassVersionError的问题排查
Java 17升级到21后Azure部署报错UnsupportedClassVersionError
问题详情
我已将Java项目从17版本升级至21版本,完成了以下本地配置:
- 环境变量
JAVA_HOME设置为Java 21目录:Variable Name: JAVA_HOME Variable Value: C:\Java\jdk-21.0.2 - 本地Java和Gradle版本验证正确:
$ java --version openjdk 21.0.2 2024-01-16 OpenJDK Runtime Environment (build 21.0.2+13-58) OpenJDK 64-Bit Server VM (build 21.0.2+13-58, mixed mode, sharing) $ gradle --version ------------------------------------------------------------ Gradle 8.10 ------------------------------------------------------------ - IntelliJ中
gradle.properties指定源码兼容性:sourceCompatibility = JavaVersion.VERSION_21 - Gradle Wrapper配置为最新8.10版本:
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip - IntelliJ的Gradle JVM和Java Compiler均已指向Java 21,本地Gradle构建成功,但外部库仍显示原Java 17库(已确认指向Java 21目录)。
部署到Azure应用服务后,日志报错:
2024-09-11T21:25:28.202408129Z 2024-09-11 21:25:28.202Z INFO c.m.applicationinsights.agent - Java version: 17.0.12, vendor: Eclipse Adoptium, home: /opt/java/openjdk 2024-09-11T21:25:28.721339850Z Exception in thread "main" java.lang.UnsupportedClassVersionError: com/xxx/yyy/Application has been compiled by a more recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime only recognizes class file versions up to 61.0
本地JAVA_HOME并非日志中的/opt/java/openjdk,怀疑问题出在Azure端,请问完成Java 17到21的升级还缺少哪些步骤?
解决方案
问题原因是Azure服务器上运行的旧版Apache Tomcat不支持Java 21,升级至兼容Java 21的新版Tomcat(如Tomcat 10.1.x或Tomcat 11.x)后,问题即可解决。
内容的提问来源于stack exchange,提问作者KevinG
相关产品推荐
相关产品推荐

