My開発メモ

H2データベースを起動しようとしたら、Can’t load library openjdk libawt_xawt.soと言われた

久しぶりにH2データベースを起動しようとしたら、全然起動しない。
で、H2データベースをインストールしたディレクトリから直接起動してみた。

$ cd ~/bin/h2/bin
$ ./h2.sh

すると、以下のようなエラーが出た。

Exception in thread "main" java.lang.UnsatisfiedLinkError:
  Can't load library:
  /usr/lib/jvm/java-11-openjdk-amd64/lib/libawt_xawt.so

グーグルさんに相談してみると、以下のページを紹介してくれた。

Exception java.lang.UnsatisfiedLinkError when trying to open allure-reports in webdriver.io project

で、Answers には、以下の方法が紹介されていた。

$ sudo apt install openjdk-11-jdk

別の方法

$ sudo apt install openjdk-[version]-jdk --fix-missing

また別の方法

$ ldd /usr/lib/jvm/java-11-openjdk-amd64/lib/libawt_xawt.so

今回は java11 で検索したが、java17 で検索してみると、以下のページがヒットした。

Exception in thread “main” java.lang.UnsatisfiedLinkError: Can’t load library: /usr/lib/jvm/java-17-openjdk-amd64/lib/libawt_xawt.so

The cause of this error may be that only “headless” part of JDK is installed, which does not include GUI libraries. Try to do sudo apt install openjdk-17-jdk, this should add necessary parts if they are missing.

このエラーの原因は、JDK の「ヘッドレス」部分のみがインストールされており、GUI ライブラリが含まれていないことが考えられます。 sudo apt install openjdk-17-jdk を実行してみてください。必要な部分が不足している場合は追加されるはずです。

実行した方法

javaのバージョンを11から17に変更した

$ sudo update-alternatives --config java

alternative java (/usr/bin/java を提供) には 3 個の選択肢があります。

  選択肢    パス                                          優先度  状態
------------------------------------------------------------
  0            /usr/lib/jvm/java-17-openjdk-amd64/bin/java      1711      自動モード
* 1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      手動モード
  2            /usr/lib/jvm/java-17-openjdk-amd64/bin/java      1711      手動モード
  3            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      手動モード

現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください: 

2を選択した。(0を選択したら、どうなるんだろう?)

$ sudo upate-alternatives --config javac

alternative javac (/usr/bin/javac を提供) には 2 個の選択肢があります。

  選択肢    パス                                        優先度  状態
------------------------------------------------------------
  0            /usr/lib/jvm/java-17-openjdk-amd64/bin/javac   1711      自動モード
* 1            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac   1111      手動モード
  2            /usr/lib/jvm/java-17-openjdk-amd64/bin/javac   1711      手動モード

現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください: 

JAVA_HOME を変更した

$ vi ~/.bashrc
# export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
export JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"
# export CATALINA_HOME="$HOME/bin/apache-tomcat-9.0.76"
export CATALINA_HOME="$HOME/bin/apache-tomcat-10.1.10"

上では、ついでに CATALINA_HOME も変更した。

ログインし直して、openjdkの再インストール

stack-overflow のページに書かれていたとおりにした。

$ sudo apt install openjdk-17-jdk

ついでに以下もやった。

$ sudo apt install openjdk-11-jdk

これで、H2データベースが起動できた。

カテゴリー: Java, memo

タグ: Can't load liblary, libawt_xawt.so, 複数Java

カウント: 303