[macOS] jEnvを使ってJavaバージョンを管理する

[macOS] jEnvを使ってJavaバージョンを管理する

2023-08-03 hit count image

同じmacOSマシンで色んなJavaバージョンを使うためjEnvを使う方法について説明します。

概要

色んなJavaプロジェクトを1つのマシン(PC)で開発すると、それぞれのプロジェクトで使うJavaバージョンによって開発環境を構築しなければならない場合があります。

この時、毎回Javaを削除して当該プロジェクトに必要なJavaバージョンをインストールすることはできません。今回のブログポストでは、macOSjEnvを使って1つのマシンで色んなJavaバージョンをインストールして管理する方法について説明します。

jEnvのインストール

次のコマンドを使ってjEnvをインストールします。

brew install jenv

その後、次のコマンドを実行してexportプラグインとmavenプラグインを有効にします。

jenv enable-plugin export
jenv enable-plugin maven

また、次のコマンドを実行してjEnvが管理するJavaバージョンを使うように設定します。

echo 'export alias java=$HOME/.jenv/shims/java' >> ~/.zshrc`

Javaバージョンリスト

次のコマンドを実行してインストール可能なJavaバージョンを確認します。

brew search openjdk

そしたら次のようにインストール可能なJavaのバージョンリストを確認することができます。

==> Formulae
openjdk ✔              openjdk@11 ✔           openjdk@17 ✔           openjdk@8              openj9                 openvdb

==> Casks
adoptopenjdk                                                           adoptopenjdk/openjdk/adoptopenjdk14
adoptopenjdk/openjdk/adoptopenjdk-jre                                  adoptopenjdk/openjdk/adoptopenjdk14-jre
...

OpenJDKのインストール

今回のブログポストではOpenJDK1117バージョンをインストールしてみます。次のコマンドを実行してOpenJDK 11バージョンをインストールします。

brew install openjdk@11

インストールが終わったら次のコマンドを使ってインストールしたJDKjEnvに登録します。

sudo ln -sfn /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk
echo 'export PATH="/usr/local/opt/openjdk@11/bin:$PATH"' >> ~/.zshrc
export CPPFLAGS="-I/usr/local/opt/openjdk@11/include"
jenv add /usr/local/Cellar/openjdk@11/11.0.19/libexec/openjdk.jdk/Contents/Home

同じ方法でOpenJDK 17バージョンをインストールしてjEnvに登録します。

brew install openjdk@17

sudo ln -sfn /usr/local/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk
echo 'export PATH="/usr/local/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc
export CPPFLAGS="-I/usr/local/opt/openjdk@17/include"
jenv add /usr/local/Cellar/openjdk@17/17.0.7/libexec/openjdk.jdk/Contents/Home
jenv add  /usr/local/Cellar/openjdk/20.0.1/libexec/openjdk.jdk/Contents/Home

jenv versions

インストールが終わったら、次のコマンドを実行してインストールされて使うことができるJavaバージョンを確認します。

jenv versions

そしたら次のように先ほどインストールしたOpenJDK 11OpenJDK 17を確認することができます。

* system (set by JENV_VERSION environment variable)
  11.0
  11.0.19
  openjdk64-11.0.19
  openjdk64-17.0.7

jenv version

次のコマンドを実行するとjEnvで設定された現在のJavaバージョンを確認することができます。

jenv version

そしたら次のように現在jEnvで選択されたJavaバージョンを確認することができます。

system (set by JENV_VERSION environment variable)

実際Javaバージョンを確認するためには次のコマンドを実行します。

java --version

そしたら、次のように実際使ってるJavaバージョンを確認することができます。

openjdk 20.0.1 2023-04-18
OpenJDK Runtime Environment Homebrew (build 20.0.1)
OpenJDK 64-Bit Server VM Homebrew (build 20.0.1, mixed mode, sharing)

インストールしたJavaバージョンを使う

次はjEnvでJavaバージョンを変更する方法についてみてみましょう。次のコマンドを実行するとOpenJDK 17をグローバルで使うことができます。

jenv global openjdk64-17.0.7

次のコマンドを使うと現在のプロジェクトにだけ適用することができます。

jenv local openjdk64-17.0.7

このコマンドは.java-versionファイルを生成して開発環境にjEnvが有効になっている場合、自動的にそのバージョンを使うように変更してくれます。

次のコマンドを使うと現在のshellのみで、当該バージョンを使うことができます。

jenv shell openjdk64-17.0.7

.java-versionファイル

先ほどjenv localコマンドを実行すると自動で.java-versionファイルが生成されることが確認できました。これを使うと、jEnvを使う開発環境では自動でJavaバージョンを変更してくれます。

なので、この.java-versionファイルを使うと当該プロジェクトを実行するために必要なJavaバージョンを共有することができます。もし、現在のプロジェクトに.java-versionファイルがない場合、.java-versionファイルを作成して次のように当該プロジェクトで必要なJavaバージョンを書き込みます。

openjdk64-17.0.7

完了

これでjEnvを使って同じマシンで色んなJavaバージョンを使う方法について見てみました。もし、皆さんも色んなJavaバージョンの開発環境が必要な場合、jEnvを使ってバージョン管理をしてみてください。

私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!

アプリ広報

今見てるブログを作成たDekuが開発したアプリを使ってみてください。
Dekuが開発したアプリはFlutterで開発されています。

興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。

Posts