436
Help us understand the problem. What are the problem?

posted at

updated at

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

Homebrewのインストール

homebrew-cask-versionsの導入

$ brew tap homebrew/cask-versions

Java 18のインストール

  • インストールされるJavaは(現時点では) OpenJDK 18 になる。
$ brew install openjdk

Java 17のインストール

$ brew install openjdk@17

Java 11のインストール

$ brew install openjdk@11

Java 8のインストール

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

  • /usr/libexec/java_homeコマンド
$ /usr/libexec/java_home -V                                                                                                                                                                                                      Matching Java Virtual Machines (13):
    17.0.1 (x86_64) "Oracle Corporation" - "Java SE 17.0.1" /Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home
    17.0.1 (x86_64) "GraalVM Community" - "GraalVM CE 21.3.0" /Library/Java/JavaVirtualMachines/graalvm-ce-java17-21.3.0/Contents/Home
    17.0.1 (x86_64) "Homebrew" - "OpenJDK 17.0.1" /usr/local/Cellar/openjdk/17.0.1_1/libexec/openjdk.jdk/Contents/Home
    17.0.1 (x86_64) "Amazon.com Inc." - "Amazon Corretto 17" /Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home
    17.0.1 (x86_64) "Microsoft Build of OpenJDK" - "Microsoft Build of OpenJDK 17" /Library/Java/JavaVirtualMachines/microsoft-17.jdk/Contents/Home
    17.0.1 (x86_64) "Eclipse Temurin" - "Eclipse Temurin 17" /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
    11.0.13 (x86_64) "Amazon.com Inc." - "Amazon Corretto 11" /Library/Java/JavaVirtualMachines/amazon-corretto-11.jdk/Contents/Home
    11.0.13 (x86_64) "GraalVM Community" - "GraalVM CE 21.3.0" /Library/Java/JavaVirtualMachines/graalvm-ce-java11-21.3.0/Contents/Home
    11.0.13 (x86_64) "Eclipse Temurin" - "Eclipse Temurin 11" /Library/Java/JavaVirtualMachines/temurin-11.jdk/Contents/Home
    11.0.13 (x86_64) "Microsoft Build of OpenJDK" - "Microsoft Build of OpenJDK 11" /Library/Java/JavaVirtualMachines/microsoft-11.jdk/Contents/Home
    11.0.12 (x86_64) "Homebrew" - "OpenJDK 11.0.12" /usr/local/Cellar/openjdk@11/11.0.12/libexec/openjdk.jdk/Contents/Home
    1.8.0_312 (x86_64) "Amazon" - "Amazon Corretto 8" /Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home
    1.8.0_312 (x86_64) "Eclipse Temurin" - "Eclipse Temurin 8" /Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-17.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 versions (as if JAVA_VERSION had been set in the environment).
    [-a/--arch      <architecture>]  Filter architecture (as if JAVA_ARCH had been set in the environment).
    [-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.
    [-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 17

$ export JAVA_HOME=`/usr/libexec/java_home -v "17"`
$ 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

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
436
Help us understand the problem. What are the problem?