【マイクラ1.17】Java16バージョンアップ後に発生した「Error: A JNI error has occurred, please check your installation and try again」の解決方法【ubuntu】

プログラミング

minecraft(マイクラ)が1.17にバージョンアップしたことに伴い、Java16対応が必要となりました。

ただネットでいろいろ調べてもなかなか正常にサーバが起動せず、処置完了、解決までに何と3日掛かりました。備忘録としてその方法を残しておきます。次のバージョンアップに備えて。。

ubuntuもdockerもJavaも詳しくない素人が、ネットの記事(時には海外のページ)を見てツギハギしながら対応したので、真似される方は自己責任でお願いします。(たぶんもっとスッキリとしたやり方があるはず)

スポンサーリンク

Java16インストールした後に問題発生

試行錯誤しながらUbuntuにJava16を入れ終わって、minecraftのサーバ起動・確認のため

#起動
docker-compose up -d

#ステータス確認
docker-compose ps

を実行したところ

Name   Command     State      Ports
-----------------------------------
mc     /start    Restarting        

と、再起動中(Restarting)との表示。

#ログを表示
docker-compose logs -f

上記でログを確認したところ、

mc    | Error: A JNI error has occurred, please check your installation and try again
mc    | Exception in thread "main" java.lang.UnsupportedClassVersionError: net/minecraft/server/Main has been compiled by a more recent version of the Java Runtime (class file version 60.0), this version of the Java Runtime only recognizes class file versions up to 52.0

というエラーが出ているとのこと。

『このサーバは Java Runtime の version 60.0 でコンパイルされているけど、いまは古いものを使っている』

という意味で、処置方法がネットに上がっていますが、「Java16 に上げてね」くらいしか書かれていません。

可能性としては、古いバージョンのJavaにアクセスしている、キャッシュが残っていると考え、ここで一旦すべてのJava関連のパッケージを削除(アンインストール)することにしました。

dockerのイメージレイヤに古いJava関連のファイルが残っている?

完全にアンインストールできたか確認するために、

sudo updatedb
sudo locate -b '\pack200'
※上記の'\'はバックスラッシュ

を実行したところ(何も引っかからないと思っていたら)、

/var/lib/docker/overlay2/省略/diff/usr/lib/jvm/java-1.8-openjdk/bin/pack200
/var/lib/docker/overlay2/省略/diff/usr/lib/jvm/java-1.8-openjdk/jre/bin/pack200

と、docker のイメージレイヤに “java-1.8-openjdk” という古いバージョンのファイルが残っていることを発見。

そこで、再度 Java16 をインストールした後で、以下を実施しました。

#コンテナを起動
docker-compose up -d

#起動しているコンテナの情報を取得
docker ps

CONTAINER ID   IMAGE                   COMMAND    CREATED          STATUS                         PORTS     NAMES
(コンテナID)   itzg/minecraft-server   "/start"   10 minutes ago   Restarting (0) 3 seconds ago             mc

#dockerイメージの情報を取得
docker images

REPOSITORY              TAG       IMAGE ID       CREATED         SIZE
itzg/minecraft-server   latest    (イメージID)   16 months ago   273MB

#コンテナを停止
docker stop (コンテナID)

#dockerイメージを削除
docker rmi -f (イメージID)

#upで作成したコンテナとネットワークを削除
docker-compose down

#再度コンテナを起動
docker-compose up -d

イメージ削除、そして再起動を実施したところ、「 Error: A JNI error has occurred, please check your installation and try again 」のエラーは出なくなり、無事にサーバが起動しました。

dockerのイメージ削除とか、なかなかたどり着くまで大変でした。

でもこの機会に色々な仕組みを知ることができて良かったかなーって思います。

なお、downでコンテナを削除する際に、”–rmi” というオプションを付けることでイメージも削除できるそうですが、それは次の機会にでも挑戦してみようかな。

タイトルとURLをコピーしました