Edited at

MacでのJAVA_HOME設定


注意


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


忙しい人向け

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が使いたいとき


解説


  • バージョンが異なる複数の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


例: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


例: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


補足

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

$ /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