search
LoginSignup
288

More than 1 year has passed since last update.

posted at

updated at

MacでのJAVA_HOME設定

2021年5月7日追記

個別にJDKをインストールするのを止めてSDKMAN!を使いましょう。
rbenvpyenvのように複数のJDKをバージョン別に管理できますし、JDK以外のgradleなどのJVM言語開発用ツールも同様に管理できます。

以下は古い内容ですが、2021年5月13日現在の最新のmacOS Big Surでも利用可能な方法ですので一応残しておきます。ですが個人的にはmacOSのバージョンに依存しないSDKMAN!の使用を推奨します。


[Deprecated] 注意事項

  • 本記事に書いてある内容はOracleJDKOpenJDKAdoptOpenJDKで動作を確認したもので、他のJDKについては不明です。

[Deprecated] 忙しい人向け

export JAVA_HOME=`/usr/libexec/java_home -v 10` #java10が使いたいとき
export JAVA_HOME=`/usr/libexec/java_home -v 9` #java9が使いたいとき
export JAVA_HOME=`/usr/libexec/java_home -v 1.8` #java8が使いたいとき
export JAVA_HOME=`/usr/libexec/java_home -v 1.7` #java7が使いたいとき
export JAVA_HOME=`/usr/libexec/java_home -v 1.6` #java6が使いたいとき

[Deprecated] 解説

  • バージョンが異なる複数のjava appの開発を行うケースなどで、同じMacのローカル環境でjava/javacのバージョンを切り替えて使いたいケースがあります。
  • xcode toolsには /usr/libexec/java_home という複数のバージョンのjavaそれぞれのhome directoryのpathを表示してくれるコマンドがあるので、これを使うとそれが可能になります。

    • このコマンドの詳細は $ man java_home で確認ください
  • なので前提条件としてXcode Command Line Toolsが必要ですが、普段macで開発してる人なら入れてると思うので(これがないとbrewもportsも使えないですし)問題ないかと思います

  • このコマンドの実態は /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java_home ですが、 /usr/libexec/java_home にsymbolic linkが貼られます

  • オプション無しで実行すると最新のJDKのバージョンのhome directoryのpathを表示してくれます(バージョン数降順がdefault orderのようです多分)

$ /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
  • manページにも記載がありますが、 -v オプションで表示したいJDKのバージョンを指定することができます。
$ /usr/libexec/java_home -v 1.8
/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home
  • なお、java9以降は -v {version} と指定しないとエラーが出るので注意が必要です。
$ /usr/libexec/java_home -v 1.9
Unable to find any JVMs matching version "1.9".
/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
$ /usr/libexec/java_home -v 9
/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
$ /usr/libexec/java_home -v 8
Unable to find any JVMs matching version "8".
/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home

[Deprecated] 例:java8が使いたい時のJAVA_HOME指定

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
# JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

[Deprecated] 例:java6が使いたい時のJAVA_HOME指定

export JAVA_HOME=`/usr/libexec/java_home -v 1.6`
# JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

[Deprecated] 補足

インストールされていないバージョンを指定した場合は最新のバージョンが指定される?ようです(詳細未確認)

$ /usr/libexec/java_home -v 1.7
# Unable to find any JVMs matching version "1.7".
# /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
$ /usr/libexec/java_home -v 1.4
# Unable to find any JVMs matching version "1.4".
# /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
288