Edited at

MacのBrewで複数バージョンのJavaを利用する + jEnv


Homebrewのインストール


homebrew-cask-versionsの導入

$ brew tap homebrew/cask-versions


Java 12のインストール



  • cask install javaでインストールされるJavaは最新版(現時点ではJava SE 12)になる。

$ brew cask install java


Java 11のインストール

$ brew cask install java11


Java 8のインストール

$ brew cask install java8


AdoptOpenJDK 8のインストール

$ brew cask install adoptopenjdk8


Amazon Corretto 8のインストール

$ brew cask install corretto8


Zulu 8のインストール

$ brew cask install zulu8


インストール済みJDK(JAVA_HOME)の確認



  • /usr/libexec/java_homeコマンド

$ /usr/libexec/java_home -V

Matching Java Virtual Machines (3):
12.0.1, x86_64: "OpenJDK 12.0.1" /Library/Java/JavaVirtualMachines/openjdk-12.0.1.jdk/Contents/Home
11.0.2, x86_64: "OpenJDK 11.0.2" /Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home
1.8.0_212, x86_64: "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/openjdk-12.0.1.jdk/Contents/Home
$ /usr/libexec/java_home --help
Usage: java_home [options...]
Returns the path to a Java home directory from the current user's settings.

Options:
[-v/--version <version>] Filter Java versions in the "JVMVersion" form 1.X(+ or *).
[-a/--arch <architecture>] Filter JVMs matching architecture (i386, x86_64, etc).
[-d/--datamodel <datamodel>] Filter JVMs capable of -d32 or -d64
[-t/--task <task>] Use the JVM list for a specific task (Applets, WebStart, BundledApp, JNI, or CommandLine)
[-F/--failfast] Fail when filters return no JVMs, do not continue with default.
[ --exec <command> ...] Execute the $JAVA_HOME/bin/<command> with the remaining arguments.
[-R/--request] Request installation of a Java Runtime if not installed.
[-X/--xml] Print full JVM list and additional data as XML plist.
[-V/--verbose] Print full JVM list with architectures.
[-h/--help] This usage information.


JDKの切り替え


Java SE 12

$ export JAVA_HOME=`/usr/libexec/java_home -v "12"`

$ PATH=${JAVA_HOME}/bin:${PATH}


Java SE 11

$ export JAVA_HOME=`/usr/libexec/java_home -v "11"`

$ PATH=${JAVA_HOME}/bin:${PATH}


Java SE 8

$ export JAVA_HOME=`/usr/libexec/java_home -v "1.8"`

$ PATH=${JAVA_HOME}/bin:${PATH}


jEnvの利用


jEnvのインストール


  • Homebrewでインストール

$ brew install jenv



  • PATHを設定


    • 使用するシェルにより異なるので注意



# Shell: bash

$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
# Shell: zsh
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(jenv init -)"' >> ~/.zshrc


  • ディレクトリを作成

$ cd ~

$ mkdir ~/.jenv/versions


jEnvにJDKを追加


  • JDKはHomebrew Caskでインストールする。


    • インストールしたJDKをjEnvに追加する。




Java8の追加

$ jenv add `/usr/libexec/java_home -v "1.8"`



jEnvに追加されているJDKの一覧


  • 先頭に*が表示されているJDKが有効化されている。

$ jenv versions

* system (set by /Users/[ユーザ名]/.jenv/version)
1.8
1.8.0.222
openjdk64-1.8.0.222


Javaの切り替え



  • jenv versionsで出力される任意のバージョンへ切り替えられる。


グローバル

$ jenv global 1.8.0.222

$ jenv versions
system
1.8
* 1.8.0.222 (set by /Users/[ユーザ名]/.jenv/version)
openjdk64-1.8.0.222
$ java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.222-b10, mixed mode)


ローカル


  • 特定のディレクトリのみに適用する。


    • コマンドを実行したディレクトリに.java-versionファイルが作成され、指定されたバージョンのJDKが利用可能となる。



$ jenv local 11.0

$ jenv versions ✘
system
1.8
1.8.0.222
* 11.0 (set by /Users/[jenv localを実行したディレクトリ]/.java-version)
11.0.2
openjdk64-1.8.0.222
openjdk64-11.0.2
$ java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
$ cat .java-version
11.0


環境変数JAVA_HOMEの自動設定


  • 自動的にJAVA_HOMEを設定するにはenable-plugin exportを実行する。


    • 自動設定を解除するにはdisable-plugin exportを実行する。



$ jenv enable-plugin export