yoshiislandblog.net
元営業の駆け出しアラサーSEが、休日にMACと戯れた際の殴り書きメモ。日々勉強。日々進歩。
Java_logo_512

Mac(Homebrew/homebrew-cask-versions)でJava複数バージョンが切り替えられる環境を作る(jenv)

2022-08-02

digdagをいじるためにJavaをインストールする必要があり、pyenvみたいに複数バージョンを管理する方法を調べていたらjenv が良さそうだったので、jenvでJavaをインストールした
jenv:https://github.com/jenv/jenv

基本的にJavaはMacのパッケージ管理ツールであるHomebrew を使ってインストールしたかったが、デフォルトのままだとHomebrewで複数バージョンのJavaをインストールできないので、homebrew-cask-versions というHomebrewの拡張機能を使った
Homebrew:https://brew.sh/index_ja
homebrew-cask-versions:https://github.com/Homebrew/homebrew-cask-versions

20220729_mac_homebrew_homebrew-cask-versions_java

homebrew-cask-versionsのインストール

まずは、Javaを複数バージョンHomebrewでインストールできるように、「homebrew-cask-versions」をインストール
homebrew-cask-versions:https://github.com/Homebrew/homebrew-cask-versions

公式ページに書いてある通り、Homebrewでインストールする

 
% brew tap homebrew/cask-versions

これで完了
今後homebrew-cask-versionsを使ってインストールしたい場合は、「brew install –cask 【パッケージ名】」というふうに、「–cask」というオプションをつけてインストールする

jenvのインストール

Javaの複数バージョンを管理するための「jenv 」もHomebrewで入れる
jenv:https://github.com/jenv/jenv

 
% brew install jenv

jenvコマンドが使えるようになっていればOK

 
% jenv versions
* system (set by $HOME/.jenv/version)

最新版Javaのインストール

ここまででJavaの複数バージョンが共存できる環境が整ったので、最新版のJavaをインストールしてみる

Javaのバージョンを確認すると、まだインストールされていないことが確認できる

 
% /usr/libexec/java_home -V
The operation couldn’t be completed. Unable to locate a Java Runtime.
Please visit http://www.java.com for information on installing Java.

しかし色々やってみてもインストールできない、、

 
% brew cask install java
Error: `brew cask` is no longer a `brew` command. Use `brew <command> --cask` instead.
 
% brew install java --cask
Error: Cask 'java' is unavailable: No Cask with this name exists.
 
% brew install --cask java
Error: Cask 'java' is unavailable: No Cask with this name exists.
 
% brew install --cask java11
Error: Cask 'java11' is unavailable: No Cask with this name exists.
 
% brew install --cask java16
Error: Cask 'java16' is unavailable: No Cask with this name exists.

調べてみると、「java」とか「java16」とかではインストールできず、「adoptopenjdk」を指定する必要があるとのこと

参考:Homebrew で Java がインストールできない時の対処法
参考:homebrew-openjdk

これで最新のJavaがインストールできた

 
% brew install --cask adoptopenjdk
...
...
🍺  adoptopenjdk was successfully installed!

インストールしたJavaのありかとバージョンを確認
「Java16.0.1」が「/Library/Java/JavaVirtualMachines/adoptopenjdk-16.jdk/Contents/Home」にインストールされていることが確認できた

 
% /usr/libexec/java_home -V
Matching Java Virtual Machines (1):
    16.0.1 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 16" /Library/Java/JavaVirtualMachines/adoptopenjdk-16.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/adoptopenjdk-16.jdk/Contents/Home

最新版Javaをjenvに追加

この時点ではまだjenvには認識されていないので、認識させる

 
% jenv versions
* system (set by $HOME/.jenv/version)

Readme通りに追加しようとすると、「No such file or directory」 のエラー

 
% jenv add "$(/usr/libexec/java_home)"
ln: $HOME/.jenv/versions/openjdk64-16.0.1: No such file or directory

「~/.jenv/versions」のディレクトリは手動で作っておかなければならないぽいので作成

 
% mkdir ~/.jenv/versions

これでjenvに先程インストールしたJavaが追加できた

% jenv add "$(/usr/libexec/java_home)"
openjdk64-16.0.1 added
16.0.1 added
16.0 added
 16.0.1 already present, skip installation
% jenv versions
* system (set by $HOME/.jenv/version)
  16.0
  16.0.1
  openjdk64-16.0.1

以下コマンドで、ローカルディレクトリに認識させたJavaのバージョンを指定できる(pyenvと同じ感じ)

% jenv local 16.0.1
% jenv versions
  system
  16.0
* 16.0.1 (set by $HOME/20220729_digdag_work/.java-version)
  openjdk64-16.0.1

他バージョンのJavaをjenvに追加

同様にJava8も入れてみる
Java8は「adoptopenjdk8」を指定する
参考:https://github.com/AdoptOpenJDK/homebrew-openjdk

% brew install --cask adoptopenjdk8
...
🍺  adoptopenjdk8 was successfully installed!

先程は「 jenv add “$(/usr/libexec/java_home)”」でjenv addしたが、今回は複数バージョンインストールされた状態なので、
今回追加したい、Java8のインストールパスを確認する

% /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    16.0.1 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 16" /Library/Java/JavaVirtualMachines/adoptopenjdk-16.jdk/Contents/Home
    1.8.0_292 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/adoptopenjdk-16.jdk/Contents/Home

確認したパスを追加

% jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
openjdk64-1.8.0.292 added
1.8.0.292 added
1.8 added
 1.8.0.292 already present, skip installation

無事jenvに追加されていることを確認

% jenv versions
  system
  1.8
  1.8.0.292
  16.0
* 16.0.1 (set by $HOME/20220729_digdag_work/.java-version)
  openjdk64-1.8.0.292
  openjdk64-16.0.1

ついでにローカル環境を1.8にしておく

% jenv local 1.8.0.292
% jenv versions
  system
  1.8
* 1.8.0.292 (set by $HOME/20220729_digdag_work/.java-version)
  16.0
  16.0.1
  openjdk64-1.8.0.292
  openjdk64-16.0.1

以上。