Java anyenv + jenvでJavaの複数バージョンを共存させる

person using macbook pro on person s lap

プロジェクトによって異なるバージョンのJavaを使用したいケースが出てきます.プロジェクトごとにスムーズにJavaのバージョンを切り替えられる環境を構築します.

目次

jenvのインストール

anyenvでのインストールを前提とします.anyenvが未インストールの場合は事前にインストールします.Macでanyenvをインストールする手順は以下を参考にしてください.

あわせて読みたい
Mac anyenvでxxenv系をまとめる 【anyenvのインストール】 anyenvにはhome brewによる方法とgit cloneによる方法の2種類があります. homebrewによるインストール $ brew install anyenv $ anyenv init...

システムの現在のJavaのバージョンを確認します.

java --version
openjdk 18.0.1.1 2022-04-22
OpenJDK Runtime Environment (build 18.0.1.1+2-6)
OpenJDK 64-Bit Server VM (build 18.0.1.1+2-6, mixed mode, sharing)

インストール済のJDKのパスを確認します.

% /usr/libexec/java_home -V
Matching Java Virtual Machines (1):
    18.0.1.1 (arm64) "Oracle Corporation" - "OpenJDK 18.0.1.1" /Users/[username]/Library/Java/JavaVirtualMachines/openjdk-18.0.1.1/Contents/Home
/Users/[username]/Library/Java/JavaVirtualMachines/openjdk-18.0.1.1/Contents/Home

システムで複数のバージョンをインストール出来るように、cask-versionsをインストールします.

$ brew tap homebrew/cask-versions

jenvanyenv経由でインストールします.

anyenv install jenv
exec $SHELL -l

新しいJDKのインストールとjenvへの追加

例として新しくjdk-9.0.4をインストールします.Java Archive Downloads – Java SE 9 | Oracle 日本 以下をダウンロードします.Java SE Development Kit 9.0.4

ダウンロードしたインストーラでインストールします.

jdk-9.0.4_osx-x64_bin.dmg

インストール済みのJDKのバージョンを確認します.jdk9をインストールしてもシステムのJDKのバージョンは変わりません.

java --version
openjdk 18.0.1.1 2022-04-22
OpenJDK Runtime Environment (build 18.0.1.1+2-6)
OpenJDK 64-Bit Server VM (build 18.0.1.1+2-6, mixed mode, sharing)

インストール済のJDKのバージョンを確認します.9.0.4が追加されました.

% /usr/libexec/java_home -V
Matching Java Virtual Machines (3):
    18.0.1.1 (arm64) "Oracle Corporation" - "OpenJDK 18.0.1.1" /Users/[username]/Library/Java/JavaVirtualMachines/openjdk-18.0.1.1/Contents/Home
    9.0.4.0.11 (x86_64) "Oracle Corporation" - "Java" /Library/Internet PlugIns/JavaAppletPlugin.plugin/Contents/Home
    9.0.4 (x86_64) "Oracle Corporation" - "Java SE 9.0.4" /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home
/Users/[username]/Library/Java/JavaVirtualMachines/openjdk-18.0.1.1/Contents/Home

jenvで利用可能なバージョンを確認します.まだjenvには9.0.4は追加されていません.

% sudo jenv versions
* system (set by /Users/[username]/.jenv/version)

jenv9.0.4を追加します.

% jenv add /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home

jenvで利用可能なバージョンを確認します.jenv9.0.4が追加されました.

% jenv versions
* system (set by /Users/takuya/.anyenv/envs/jenv/version)
  9.0
  9.0.4
  oracle64-9.0.4

jenvのインストールフォルダを確認すると,anyenv/envs/jenv/versions配下に9.0.4も追加されています.

% ls -alh ~/.anyenv/envs/jenv/versions/
total 0
drwxr-xr-x   5 [username]  staff   160B Jul 19 10:40 .
drwxr-xr-x  22 [username]  staff   704B Jul 19 10:40 ..
lrwxr-xr-x   1 [username]  staff    61B Jul 19 10:40 9.0 -> /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home
lrwxr-xr-x   1 [username]  staff    61B Jul 19 10:40 9.0.4 -> /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home
lrwxr-xr-x   1 [username]  staff    61B Jul 19 10:40 oracle64-9.0.4 -> /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home

9.0, 9.0.4, oracle64-9.0.4と3つのバージョンが追加されていますが,どれも同じ/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Homeへのシンボリックリンクになっています.そのためjenvで指定するときはいずれを使っても違いはないようです.

JAVA_HOMEjenvのパスを参照するように変更します.

$ jenv enable-plugin export
You may restart your session to activate jenv export plugin echo export plugin activated

セッションをリスタートし,$JAVA_HOMEが変更されていることを確認します.

% jenv doctor
[OK]    JAVA_HOME variable probably set by jenv PROMPT
[OK]    Java binaries in path are jenv shims
[OK]    Jenv is correctly loaded

% echo $JAVA_HOME
/Users/[username]/.anyenv/envs/jenv/versions/system

Java環境の切り替え (ローカル)

% mkdir examples
% cd examples
% jenv local 9.0
% java --version
java 9.0.4
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)

ローカル用に作成された.java-versionファイルを確認します.jenvではローカルでJavaのバージョンを指定すると,ディレクトリ内に.java-versionファイルを作成し,そこにバージョンを記載します.

% cat ./.java-version
9.0

参考

よかったらシェアしてね!
目次