質問
⚠️ この事例は公開されてから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でのコンパイルによる解決方法を提示