UnsupportedClassVersionError
Javaのコンパイル時と実行時のバージョン不一致で発生するエラー
概要
UnsupportedClassVersionErrorは、より新しいバージョンのJDKでコンパイルされたクラスファイルを、古いバージョンのJREで実行しようとした場合に発生します。
エラーメッセージ
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/example/MyClass
has been compiled by a more recent version of the Java Runtime (class file version 65.0),
this version of the Java Runtime only recognizes class file versions up to 61.0
クラスファイルバージョンとJDKの対応
| クラスファイルバージョン | JDKバージョン |
|---|---|
| 52.0 | Java 8 (LTS) |
| 55.0 | Java 11 (LTS) |
| 61.0 | Java 17 (LTS) |
| 65.0 | Java 21 (LTS) |
| 66.0 | Java 22 |
| 67.0 | Java 23 |
原因
- JDKバージョンの不一致: コンパイルに使用したJDKが、実行環境のJREより新しい
- CI/CDと本番環境の差異: ビルドサーバーと実行サーバーでJavaバージョンが異なる
- 依存ライブラリのバージョン: サードパーティJARが新しいJDKでコンパイルされている
- JAVA_HOMEの設定ミス: 環境変数が意図しないJDKを指している
解決策
1. 実行環境のJavaバージョンを確認・更新する
| |
2. –releaseオプションでコンパイルする
ターゲットの実行環境に合わせたバージョンでコンパイルする。
| |
3. Mavenでターゲットバージョンを指定する
| |
4. Gradleでターゲットバージョンを指定する
| |
5. JAVA_HOMEを正しく設定する
| |
関連エラー
- ClassNotFoundException - クラスが見つからない場合に発生
- OutOfMemoryError - メモリ不足で発生
Java の他のエラー
この記事は役に立ちましたか?