【发布时间】:2022-11-17 17:02:30
【问题描述】:
我最近将 Java 版本从 11 升级到 17。但是每当我运行 .war 文件时,我都会收到以下错误:
java.lang.UnsupportedClassVersionError: somePackage/SomeClass 已由较新版本的 Java 运行时(类文件版本 61.0)编译,此版本的 Java 运行时只能识别 55.0 以下的类文件版本(无法加载类 [somePackage.某类])
为了验证 Tomcat 是否使用了正确的版本,我这样做了:
[root@ip-172-31-21-71 apache-tomcat-9.0.58]# java -cp lib/catalina.jar org.apache.catalina.util.ServerInfo Server version: Apache Tomcat/9.0.58 Server built: Jan 15 2022 14:37:38 UTC Server number: 9.0.58.0 OS Name: Linux OS Version: 4.14.214-160.339.amzn2.x86_64 Architecture: amd64 JVM Version: 17.0.5+8-LTS JVM Vendor: Amazon.com Inc. [root@ip-172-31-21-71 apache-tomcat-9.0.58]# ps -ef | grep tomcat root 12088 11400 0 08:49 pts/0 00:00:00 grep --color=auto tomcat root 15642 1 1 Nov16 ? 00:12:09 /opt/jdk-17.0.5/bin/java -Djava.util.logging.config.file=/opt/apache-tomcat-9.0.58/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dfile.encoding=UTF-8 -Xms128m -Xmx700m -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /opt/apache-tomcat-9.0.58/bin/bootstrap.jar:/opt/apache-tomcat-9.0.58/bin/tomcat-juli.jar -Dcatalina.base=/opt/apache-tomcat-9.0.58 -Dcatalina.home=/opt/apache-tomcat-9.0.58 -Djava.io.tmpdir=/opt/apache-tomcat-9.0.58/temp org.apache.catalina.startup.Bootstrap start [root@ip-172-31-21-71 apache-tomcat-9.0.58]# /opt/jdk-17.0.5/bin/java --version java 17.0.5 2022-10-18 LTS Java(TM) SE Runtime Environment (build 17.0.5+9-LTS-191) Java HotSpot(TM) 64-Bit Server VM (build 17.0.5+9-LTS-191, mixed mode, sharing)甚至
${JAVA_HOME}也指向正确的目录。一切都在当地运作良好。我不知道我错过了什么。任何建议,将不胜感激。提前致谢。
【问题讨论】:
-
您的(实际)tomcat 服务是如何启动的? (我的猜测是它没有使用你的交互式 shell 的环境变量......)
-
在 bin/ => ./startup.sh 中启动 tomcat。 setenv.sh 文件中有一些环境变量,但没有关于 java 版本的信息
-
请don't upload text as image。编辑您的问题以包含文本形式的所有信息 - 考虑使用编辑器的格式设置选项。另见How to Ask。
-
那么你是手动运行tomcat的
startup.sh文件吗?或者你是从 init / systemd / 什么运行它的? -
是的,我正在手动运行它。