Java 17でコンパイルしたモジュールが動作しない問題

質問

⚠️ この事例は公開されてから1年以上経過しています。 情報が古い可能性がありますので、ご注意ください。

🕓 事例公開日 : 2024-09-17

【背景】

開発環境でJDK 17.0.12を使用してモジュールを作成し、Accel-Mart Plus環境へ適用を試みた。



1. 事象

エラーメッセージ・スタックトレース:

java.lang.UnsupportedClassVersionError: com/example/foo/BarAction 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

症状の説明:

モジュールをAccel-Mart Plus環境に適用しようとすると、Java 17に対応していない旨のエラーが出てしまい、モジュールが正常に動作しない。

2. 発生条件

・開発環境:JDK 17.0.12を使用 ・対象環境:Accel-Mart Plus環境 ・操作:Java 17でコンパイルしたモジュールを環境へ適用

回答

1. 原因

技術的な原因:

Accel-Mart Plus環境はJava 11で稼働しているため、Java 17でコンパイルされたモジュールを実行できません。

技術的要因の分析:

・要因1:開発環境でJava 17を使用してコンパイル → バイトコードがJava 17形式で生成される
・要因2:Accel-Mart Plus環境のJVMはJava 11で動作 → Java 17形式のバイトコードを解釈できない
・要因3:Javaのバージョン互換性の制約 → 上位バージョンでコンパイルされたクラスファイルは下位バージョンのJVMで実行不可

根本的な要因:

開発環境とAccel-Mart Plus環境のJavaバージョンの不一致により、コンパイルされたバイトコードの互換性が失われていることが根本原因です。

2. 対応方法

根本解決方法:

1. 開発環境にJDK 11(例:JDK 11.0.23)をインストールします
2. Java 11環境でモジュールを再コンパイルします
3. 生成されたモジュールをAccel-Mart Plus環境へ適用します
4. 動作確認を実施します

補足情報:

現在、Accel-Mart Plus環境ではJava 11に対応しており、Java 17のサポート予定は未定です。開発時はJava 11環境でのコンパイルを実施してください。

3. 原因究明に至るまでの調査方法

1. エラーメッセージからJava 17が未サポートであることを確認
2. Accel-Mart Plus環境のJavaバージョンを確認(Java 11で稼働)
3. 開発環境のJDKバージョンを確認(JDK 17.0.12を使用)
4. Javaバージョンの不一致が原因であることを特定
5. Java 11でのコンパイルによる解決方法を提示
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています
Powered by Zendesk