できない.dev

JAVA_HOME

別名: JAVA_HOME 環境変数 / $JAVA_HOME / %JAVA_HOME%

JAVA_HOME は JDK のインストール先を指す環境変数である。
Maven や Gradle はこの値から使う java を決めるため、未設定や指す場所の誤りでビルドが止まったり古い JDK で動いたりする。

公開:

定義

JAVA_HOME は、JDK をインストールしたディレクトリを指す環境変数である。Java のビルドツールは、この値をもとに java や javac の場所を決める。
値は bin の 1 つ上のディレクトリにする。

詳細

Maven の公式ドキュメント(新しいタブで開く)は、前提として JDK を入れ、JAVA_HOME を設定するか PATH に java を置くよう求めている。mvn の起動スクリプトは、JAVA_HOME があればその下の bin/java で Maven を動かす。
Gradle も JAVA_HOME で使う JDK を指定でき、複数の JDK を入れた環境で特に役立つ。

export JAVA_HOME=/usr/lib/jvm/temurin-21-jdk-amd64
mvn -v

macOS では /usr/libexec/java_home -v 21 が該当するパスを返す。
端末で打った export はそのシェルを閉じると消えるので、残すには ~/.bashrc や ~/.zshrc に書く。

よくある誤解

java -version が新しくても、Maven が同じ JDK で動くとは限らない。JAVA_HOME が古い JDK を指したままなら、Maven はそちらで動いて release version not supported になる。
どの JDK で動いているかは mvn -v の表示で分かる。

JAVA_HOME に bin まで含めるのも誤りである。
起動スクリプトは $JAVA_HOME/bin/java を探すので、bin/bin/java を見に行って失敗する。

関連

未設定で止まる症状は JAVA_HOME is not set にまとめている。
実行ファイルの検索順は PATH、設定の残し方はシェルの起動ファイルが扱う。