バグ #558
UnsupportedClassVersionError がスローされて Java Servlet が起動しない
みぞ @mizo0203 さんがほぼ5年前に追加.
ほぼ5年前に更新.
説明
# cat /usr/share/tomcat/logs/localhost.2019-11-23.log
Nov 23, 2019 8:18:24 AM org.apache.catalina.core.StandardHostValve invoke
SEVERE: Exception Processing /fastest-finger-first/challenge
java.lang.UnsupportedClassVersionError: com/mizo0203/fastest/finger/first/ChallengeServlet has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 (unable to load class com.mizo0203.fastest.finger.first.ChallengeServlet)
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:3209)
at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:1373)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1861)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735)
at org.apache.catalina.core.StandardWrapper.servletSecurityAnnotationScan(StandardWrapper.java:1211)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:495)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
- class file version 52.0: JRE 1.8
- class file version 55.0: JRE 11
JRE 11 向けにビルドしたが、 Web サーバの Java 実行環境は JRE 1.8 であった。
そのため、上記エラーにより Java Servlet が起動できなかった。
ひとまず、現行通り JRE 1.8 向けにビルドすることでこの問題を回避する。
下記、参考情報
CentOS 7 に OpenJDK 11 をインストールする手順¶
# yum install java-11-openjdk
読み込んだプラグイン:fastestmirror, langpacks
Determining fastest mirrors
epel/x86_64/metalink | 10 kB 00:00:00
* base: mirrors.cat.net
* epel: mirrors.aliyun.com
* extras: mirrors.cat.net
* updates: mirrors.cat.net
base | 3.6 kB 00:00:00
epel | 5.3 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/3): epel/x86_64/primary_db | 6.9 MB 00:00:00
(2/3): epel/x86_64/updateinfo | 1.0 MB 00:00:01
(3/3): updates/7/x86_64/primary_db | 4.2 MB 00:00:01
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ java-11-openjdk.x86_64 1:11.0.5.10-0.el7_7 を インストール
--> 依存性の処理をしています: java-11-openjdk-headless(x86-64) = 1:11.0.5.10-0.el7_7 のパッケージ: 1:java-11-openjdk-11.0.5.10-0.el7_7.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ java-11-openjdk-headless.x86_64 1:11.0.5.10-0.el7_7 を インストール
--> 依存性解決を終了しました。
依存性を解決しました
===========================================================================================================================================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
===========================================================================================================================================================================================================================
インストール中:
java-11-openjdk x86_64 1:11.0.5.10-0.el7_7 updates 212 k
依存性関連でのインストールをします:
java-11-openjdk-headless x86_64 1:11.0.5.10-0.el7_7 updates 39 M
トランザクションの要約
===========================================================================================================================================================================================================================
インストール 1 パッケージ (+1 個の依存関係のパッケージ)
総ダウンロード容量: 39 M
インストール容量: 164 M
Is this ok [y/d/N]: y
Downloading packages:
(1/2): java-11-openjdk-11.0.5.10-0.el7_7.x86_64.rpm | 212 kB 00:00:00
(2/2): java-11-openjdk-headless-11.0.5.10-0.el7_7.x86_64.rpm | 39 MB 00:00:04
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計 7.8 MB/s | 39 MB 00:00:04
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : 1:java-11-openjdk-headless-11.0.5.10-0.el7_7.x86_64 1/2
インストール中 : 1:java-11-openjdk-11.0.5.10-0.el7_7.x86_64 2/2
検証中 : 1:java-11-openjdk-11.0.5.10-0.el7_7.x86_64 1/2
検証中 : 1:java-11-openjdk-headless-11.0.5.10-0.el7_7.x86_64 2/2
インストール:
java-11-openjdk.x86_64 1:11.0.5.10-0.el7_7
依存性関連をインストールしました:
java-11-openjdk-headless.x86_64 1:11.0.5.10-0.el7_7
完了しました!
# alternatives --config java
2 プログラムがあり 'java' を提供します。
選択 コマンド
-----------------------------------------------
*+ 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre/bin/java)
2 java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.5.10-0.el7_7.x86_64/bin/java)
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2
# java -version
openjdk version "11.0.5" 2019-10-15 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.5+10-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.5+10-LTS, mixed mode, sharing)
- ステータス を 進行中 から 完了 に変更
- 進捗率 を 40 から 100 に変更
他の形式にエクスポート: Atom
PDF