簡體   English   中英

Tomcat 不識別 Java 升級

[英]Tomcat doesn't recognise Java Upgrade

我最近將 Java 版本從 11 升級到 17。但是每當我運行 .war 文件時,我都會收到以下錯誤:

java.lang.UnsupportedClassVersionError: somePackage/SomeClass has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0 [31995pack18 無法加載18.0]某類])

為了驗證 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}也指向正確的目錄。 一切都在當地運作良好。 我不知道我錯過了什么。 任何建議,將不勝感激。 提前致謝。

好吧...因為您正在手動運行startup.sh ...

startup.sh調用catalina.sh start catalina.sh腳本使用JRE_HOMEJAVA_HOME環境變量。 但是如果可以找到它們,它會通過獲取setenv.sh腳本來加載它們。

所以我敢打賭,您的setenv.sh是顯着JRE_HOMEJAVA_HOME設置所在的位置。

但好消息是,所有這些文件都只是 shell 個腳本,因此您可以閱讀它們以弄清楚發生了什么。 而如果你看不懂shell腳本,你可以在各自的腳本中加上set -x看看他們在干什么!


順便一提:

為了驗證 Tomcat 是否使用了正確的版本,我這樣做了: $ java -cp lib/catalina.jar org.apache.catalina.util.ServerInfo

那不是一個有效的測試。 您必須弄清楚腳本如何選擇它們正在使用的 JRE。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM