Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
283
Help us understand the problem. What are the problem?

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
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
283
Help us understand the problem. What are the problem?