環境
- Windows11 X64
- Java8
発生した問題
ビルドしたJARファイルを実行すると以下のエラーが発生しました。
(なお、ソースコードはkoltinで作成されています。)
$ java -jar build/libs/demo1-0.0.1-SNAPSHOT.jar
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/springframework/boot/loader/JarLauncher 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 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
エラーメッセージを読む限り、JARファイルをビルドした環境のJavaがJARファイルを実行する環境よりも古いバージョンであることが原因であると思われます。
そこで、ビルド環境と実行環境それぞれのJavaのバージョンを確認します。
なお、ビルド環境はプロジェクトのJVM, 実行環境はローカルPCにインストールしたJavaを利用しています。
ビルド環境
java {
sourceCompatibility = JavaVersion.VERSION_17
}
// 一部省略
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs += "-Xjsr305=strict"
jvmTarget = "17"
}
}
実行環境
$ java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
ビルド環境のjavaバージョンが17であるのに対して、実行環境のjavaバージョンが8でした。
バージョン差分をなくせば正常動作すると思われます。
今回は実行環境のJavaバージョンをビルド環境に揃えるために17にアップデートします。
解消手順
1. WindowsにJava17のインストーラをインストールする
OracleのWebページから Windows x64 Installer
をダウンロードします。
2. インストーラを実行する
jdk-17.0.8_windows-x64_binをクリックします
ポップアップの選択肢は全て「はい」や「次へ」をクリックします。
デフォルトではC:\Program Files\Java
にJDKがインストールされます。
3. 環境変数JAVA_HOMEの設定
【環境変数を編集】でシステム環境変数 `` JAVA_HOME ``` に先ほどインストールしたJDK-17のパスを指定します。
環境変数を指定した後は一度PCを再起動します。
結果確認
ターミナルでJavaのバージョンを確認します。
$ java -version
java version "17.0.8" 2023-07-18 LTS
Java(TM) SE Runtime Environment (build 17.0.8+9-LTS-211)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.8+9-LTS-211, mixed mode, sharing)
無事更新されていました。
それではJARファイルを実行してみます。
正常に実行されていました。