Help us understand the problem. What is going on with this article?

MacでのJAVA_HOME設定

More than 1 year has passed since last update.

注意

  • 本記事に書いてある内容は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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away