Spring Boot3プロジェクト起動時にエラー発生「UnsupportedClassVersionError」

Spring Bootのバージョン3のプロジェクトを作成して起動した時に発生したエラー「〜 java.lang.UnsupportedClassVersionError: 〜 SpringApplication has been compiled by a more recent version of the Java Runtime 〜」の原因と解決方法について説明しています。

※ 本ページはプロモーションが含まれています。

このページの目的と動作環境

最終更新日:2023/6/1

Java開発環境のEclipseで、SpringのスタータープロジェクトでSpring Bootのバージョン3系が選べるようになっていたので、試しにSpring Bootのバージョン3.1のプロジェクトを作成して、プロジェクト作成後すぐにSpring Bootアプリを起動したら、コンソールログにこのエラーが発生して起動できませんでした。

OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/springframework/boot/SpringApplication 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 58.0
	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
	at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
	at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:821)
〜

本記事では、この起動時エラーの原因と解決方法と自分がやった事について説明しています。

ちなみに1行目の「OpenJDK 64-Bit Server VM warning」と、2行目以降の「Exception in thread "main" java.lang.UnsupportedClassVersionError〜」は別問題で、今回の本題は2行目以降の例外の方です。1行目位はwarningなので警告です。

◾️動作環境とバージョン情報です
OS:macOS Big Sur(バージョン11.7.7)
開発環境:Eclipse(Pleiades All in One Java Full Edition版)

Spring Boot3にはJava17以上が必要。OpenJDK17のインストールとEclipseで使うJavaの設定をする

起動時エラーの「Exception in thread "main" java.lang.UnsupportedClassVersionError: org/springframework/boot/SpringApplication has been compiled by a more recent version of the Java Runtime 〜」の原因ですが、結論から言うとSpring Bootのバージョン3では、システム要件としてJavaのバージョンが最低でもJava17みたいで、今回は古いJavaを使おうとしたからこのエラーが発生していました。

Spring Boot3のシステム要件の詳細については、Spring Boot3.0のリリースノートを参考にしてください。
Spring Boot 3.0 Release Notes

原因は分かったけど、自分が使っているEclipse(Pleiades All in One)にはJavaがバンドルされているが、そのJavaのバージョンは一番新しくてもJava14なので、OpenJDK17(Java17)をインストールする事にしました。(2023/6/1時点のJDKの最新版は、LTSならJDK17、非LTSならDK20です。LTSは長期安定サポートの事。)

OpenJDK17のインストールについては別ページで説明しているので、良ければ参考にしてください。
OpenJDK17をインストールする【macOS】

そして、OpenJDK17をインストールできたら、EclipseでそのOpenJDK17を使用する設定をする必要があります。その設定方法についても別ページで説明しているので、そちらを参考にしてください。
EclipseのJavaプロジェクトで使うJDK(Java)を新規追加して設定する

これで、Spring Boot3系のプロジェクトでJDK17を使用するように設定してSpring Bootアプリを起動したら、問題の例外エラーは出なくなり起動できるようになりました!

警告メッセージ「OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated 〜」

本題のエラーは解決しましたが、起動時に一緒に出たワーニングについても説明しておきます。

警告メッセージ「OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.」をDeepLで翻訳したらこんな意味です。

OpenJDK 64-Bit Server VMの警告です: オプション-Xverify:noneと-noverifyは、JDK13で非推奨となり、将来のリリースで削除される可能性があります。

Spring Bootアプリの起動時のVMオプションで使っている-Xverify:noneと-noverifyが原因みたいなので、これをやめればこの警告は消えそうです。(ちなみに-Xverify:noneの方が、Javaバイトコードの検証を行わなくするオプションらしい。)

この警告は、-Xverify:noneと-noverifyのVMオプションは将来リリース版で使えなくなる可能性があるからという話なので、今は全然無視しても良さそうですが、それでも気になるから解決方法についてです。

EclipseのSpring Bootプロジェクトを右クリック->実行->実行の構成を選択して、実行構成画面を開きます。
実行構成画面のSpring Bootタブを選択して、高速スタートアップというのがあるので(英語版ならFast startup)、そのチェックボックスを外せばSpring Bootアプリ起動時の警告メッセージは出なくなります。
Spring Bootの実行構成画面で高速スタートアップの設定

ただ、高速スタートアップのチェックを外せばいかにも高速でなくなりそうだし、チェックを外した時に今度はこの警告ダイアログが出ました。
Spring BootのFast Startup Warning

Fast Startup Warning
Fast startup performs Java VM arguments tuning to enchance startup at the possible expense of a performance of the application during its runtime. It is recommended to use this setting for debugging purposes only

英語の警告文を見る限り、やっぱり高速スタートアップはスピードアップしてくれるみたいで、特にデバッグ時だけでも高速スタートアップにした方がいいと丁寧に言ってますね。やっぱり個人的には起動時の警告はスルーのままで良いかなと。

あと、Eclipseの設定を開いて、設定画面でSpring->Bootを選択すると、高速スタートアップをトリガーするJava VM引数という設定があります。
EclipseでSpring Bootの高速スタートアップのVMオプションの設定

このVM引数にある-noverifyを消しても、Spring Bootアプリ起動時の警告メッセージは出なくなりました。
■編集前

-noverify -XX:TieredStopAtLevel=1
■編集後
-XX:TieredStopAtLevel=1

まー繰り返しになりますが、起動時の警告はスルーしてれば良いかなと思います。