📘

MacでマルチJavaバージョン(Temurin)の切替

2022/03/16に公開

前描き

現在LTSのJavaバージョンでは四つがあります。

  1. 21
  2. 17(2023年12月の現在のメイジャーバージョン)
  3. 11
  4. 8(新規プロジェクトには殆ど使わない)

案件によりますが、使用するバージョンが違うかも知れません。コマンドラインからビルドする時、JAVA_HOMEを指定しての実施ではないかと思います。
しかし、手でコマンドを打つ時、一時的にバージョンを切り替えたい場合、インストールしたパスを暗記しないと無理です。
この時、Java切替のアリスを用意すれば、ストレスがなく切り替えられると思います。

Javaのベンダーが沢山ありますが、Eclipse Temurinを愛用しています。
以降説明はEclipse Temurinをベースに説明します。

メジャーバージョンのJDKのインストール

v17のインストール

brew tap homebrew/cask-versions
brew install --cask temurin21

v17のインストール

brew tap homebrew/cask-versions
brew install --cask temurin17

v11のインストール

brew tap homebrew/cask-versions
brew install --cask temurin11

v8のインストール

brew tap homebrew/cask-versions
brew install --cask temurin8

インストール済みのバージョンの確認

$ /usr/libexec/java_home -V
Matching Java Virtual Machines (5):
    21.0.1 (x86_64) "Eclipse Adoptium" - "OpenJDK 21.0.1" /Users/gekal/Library/Java/JavaVirtualMachines/temurin-21.0.1/Contents/Home
    21.0.1 (x86_64) "Eclipse Adoptium" - "OpenJDK 21.0.1" /Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home
    17.0.9 (x86_64) "Eclipse Temurin" - "Eclipse Temurin 17" /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
    17.0.9 (x86_64) "Eclipse Temurin" - "Eclipse Temurin 17" /Users/gekal/Library/Java/JavaVirtualMachines/temurin-17.0.9/Contents/Home
    11.0.21 (x86_64) "Eclipse Adoptium" - "OpenJDK 11.0.21" /Library/Java/JavaVirtualMachines/temurin-11.jdk/Contents/Home
    11.0.14.1 (x86_64) "Eclipse Temurin" - "Eclipse Temurin 11" /Users/gekal/Library/Java/JavaVirtualMachines/temurin-11.0.14.1/Contents/Home
    1.8.0_392 (x86_64) "Eclipse Temurin" - "Eclipse Temurin 8" /Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home
/Users/gekal/Library/Java/JavaVirtualMachines/temurin-21.0.1/Contents/Home

バージョンの切替

切替の事前準備

下記のスクリプトをBASHのリソースに追加します。
zshの場合、~/.zshrcに下記のコマンドを追記してください。

# 各バージョンのJAVA_HOMEを設定
export JAVA_21_HOME=$(/usr/libexec/java_home -v 21)
export JAVA_17_HOME=$(/usr/libexec/java_home -v 17)
export JAVA_11_HOME=$(/usr/libexec/java_home -v 11)
export JAVA_8_HOME=$(/usr/libexec/java_home -v 1.8)

# Java Versionの切替アリスを設定
alias java21="export JAVA_HOME=$JAVA_21_HOME"
alias java17="export JAVA_HOME=$JAVA_17_HOME"
alias java11="export JAVA_HOME=$JAVA_11_HOME"
alias java8="export JAVA_HOME=$JAVA_8_HOME"

バージョンの切替確認

$ java8
$ java -version
openjdk version "1.8.0_322"
OpenJDK Runtime Environment (Temurin)(build 1.8.0_322-b06)
OpenJDK 64-Bit Server VM (Temurin)(build 25.322-b06, mixed mode)
$ java11       
$ java -version
openjdk version "11.0.14.1" 2022-02-08
OpenJDK Runtime Environment Temurin-11.0.14.1+1 (build 11.0.14.1+1)
OpenJDK 64-Bit Server VM Temurin-11.0.14.1+1 (build 11.0.14.1+1, mixed mode)
$ java17       
$ java -version
openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment Temurin-17.0.2+8 (build 17.0.2+8)
OpenJDK 64-Bit Server VM Temurin-17.0.2+8 (build 17.0.2+8, mixed mode, sharing)
$ java21    
$ java -version
openjdk version "21.0.1" 2023-10-17 LTS
OpenJDK Runtime Environment Temurin-21.0.1+12 (build 21.0.1+12-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.1+12 (build 21.0.1+12-LTS, mixed mode)

参照資料

  1. Eclipse Temurin
  2. Upgrade to OpenJDK Temurin using Homebrew

Discussion