テクノロジー · 実用ガイド
UnsupportedClassVersionError?Java を変える前に class と loading JVM を証明する
エラーは互換性不一致の両端を示します。class major、artifact、実際の launcher を保存し、runtime を上げるか build を retarget するか選び、古い出力を消して local・CI・production 相当の同じ entrypoint で確認します。

エラーは互換性不一致の両端を示します。class major、artifact、実際の launcher を保存し、runtime を上げるか build を retarget するか選び、古い出力を消して local・CI・production 相当の同じ entrypoint で確認します。
JVM は対応する class-file version だけを読み込み、より高い major はアプリ実行前に拒否します。 Java 8 から Java 25 は class-file major 52 から 69 に対応します。
1. 正確な不一致を固定する
最初の UnsupportedClassVersionError 全文、拒否 class、報告 class-file version、認識上限、launcher command、時刻を保存します。後で開いた別 shell ではなく失敗 context の java -version と javac -version を記録します。
JVM 仕様で major を対応付けますが表だけで終えません。通常の major mismatch と minor 65535 の preview mismatch は要件が違うため、表示されるなら両方保存します。
2. 拒否された artifact を特定する
最初の stack frame が示す .class または JAR を特定し、path、hash、package 座標または image digest、build provenance を記録します。可能なら抽出 class に javap -verbose を使い、実行せず major を確認します。
拒否 class が application、build plugin、annotation processor、IDE helper、transitive dependency のどれかを判定します。application target の変更で既成 third-party bytecode は変わりません。
3. 実際の loading runtime を証明する
実際に class を load する process を追い、解決済み java path、command line、JAVA_HOME/toolchain、working directory、container image を記録します。service は unit、CI は runner step、IDE/daemon は再起動後の設定を確認します。
login shell の which java だけを証拠にしません。wrapper、SDK manager、symlink、daemon reuse、PATH 順序、container layer が別 JVM を選べます。
4. 互換方向を一つ選ぶ
新 bytecode が必要で dependency も対応するなら、所有 launcher の runtime を上げて support window を確認します。developer shell だけでなく service、CI image、IDE、container を変更し persistent daemon を再起動します。
古い runtime を維持するなら --release 等で管理下コードを retarget し、互換 bytecode の dependency/plugin version を選びます。class header 改変や source compatibility の推測は使いません。
5. 古い混在出力を除く
新しい class を残す output、cache、package を削除または隔離します。選定 toolchain で clean build し artifact hash を記録、application・generated・dependency class を代表確認します。
multi-module では一部 module、生成 task、plugin が別 JDK を使えます。compile 成功だけでなく build log、toolchain 選択、最終 package を証明します。
6. すべての実入口で検証する
同じ artifact hash を必要な shell、IDE/build tool、CI、service、production 相当 container で実行します。最初の class が load され、test が通り、後続の不互換 class がないことを要求します。
launcher、java path、runtime version、artifact hash、class major、結果、rollback の受入表を残します。build と loader を同じ policy が支配して初めて完了です。
