Mac(Homebrew/homebrew-cask-versions)でJava複数バージョンが切り替えられる環境を作る(jenv)
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
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
以上。