2021年5月7日追記
個別にJDKをインストールするのを止めてSDKMAN!を使いましょう。
rbenvやpyenvのように複数のJDKをバージョン別に管理できますし、JDK以外のgradleなどのJVM言語開発用ツールも同様に管理できます。
以下は古い内容ですが、2021年5月13日現在の最新のmacOS Big Surでも利用可能な方法ですので一応残しておきます。ですが個人的にはmacOSのバージョンに依存しないSDKMAN!の使用を推奨します。
[Deprecated] 注意事項
- 本記事に書いてある内容はOracleJDK,OpenJDK,AdoptOpenJDKで動作を確認したもので、他の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