MacでJavaのVersionを楽に切り替える

全般

記事作成から1年以上経過しています。
内容が古い可能性があります。

開発環境に応じて、MacでJavaVersionの切り替え方法をまとめました。
手動で設定ファイル書き換えを行う手順と、カスタムエイリアスで実現する手順を試してみます。

前提

  • OS
    • Mac / Mojave
  • 実行シェル
    • fish shell

設定ファイル書き換えで切り替える場合(手動)

Javaのフルパス検索

まずは、whichコマンドでJavaのフルパスを確認します。

~ ❯❯❯ which java
/usr/bin/java

コマンドの実行結果を見ると、Javaのフルパスはシンボリックリンクになっているので「/System」から始まっているフルパスの方を「ls -la」コマンドで調べます。

~ ❯❯❯ ls -al /usr/bin/java
lrwxr-xr-x  1 root  wheel  74  1 16  2019 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

インストールされているJavaの確認

確認した「/System」から始まるJavaフルパスをもとに、Javaのバージョンを確認します。

~ ❯❯❯ /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java_home -V
Matching Java Virtual Machines (4):
    14, x86_64:    "OpenJDK 14"    /Library/Java/JavaVirtualMachines/openjdk-14.jdk/Contents/Home
    11.0.7, x86_64:    "Java SE 11.0.7"    /Library/Java/JavaVirtualMachines/jdk-11.0.7.jdk/Contents/Home
    1.8.0_251, x86_64:    "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home
    1.8.0_212, x86_64:    "AdoptOpenJDK 8"    /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/openjdk-14.jdk/Contents/Home

今回はjdk11に設定したいのでfish shellにパスを通します。
vimコマンドで、config.fishを開きます。

~ ❯❯❯ vim ~/.config/fish/config.fish

以下内容をコピペで追加します。(ユニバーサルで追加,全てのセッションで有効)
※追加したら、ファイル保存も忘れずに。

set -U JAVA_HOME (/usr/libexec/java_home -v 11)

設定(config.fish)読み込み

修正した config.fishを読み込みます。

source ~/.config/fish/config.fish

再度JavaのVersionの確認

再度JavaのVersionを確認してみます。
config.fish に追加したJavaのVersionが表示されました!

~ ❯❯❯ java -version
java version "11.0.7" 2020-04-14 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.7+8-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.7+8-LTS, mixed mode)

カスタムエイリアスで実現する場合(パス書き換えなし)

こちらのサイトを参考にさせて頂きました。
ファイルを配置すればカスタムしたエイリアスで切り替えられます。

function javaenv
    if test (count $argv) -eq 0
        /usr/libexec/java_home -V
    else
        switch $argv[1]
        case 'ls'
            /usr/libexec/java_home -V
        case 'set'
            set -xU JAVA_HOME (/usr/libexec/java_home -v $argv[2])
        end
    end
end

インストールされているJavaの確認

javaenvコマンドで、JavaのVerisonを確認します。

~ ❯❯❯ javaenv
Matching Java Virtual Machines (4):
    14, x86_64:    "OpenJDK 14"    /Library/Java/JavaVirtualMachines/openjdk-14.jdk/Contents/Home
    11.0.7, x86_64:    "Java SE 11.0.7"    /Library/Java/JavaVirtualMachines/jdk-11.0.7.jdk/Contents/Home
    1.8.0_251, x86_64:    "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home
    1.8.0_212, x86_64:    "AdoptOpenJDK 8"    /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/openjdk-14.jdk/Contents/Home

JavaのVersion切り替え

javaenvコマンドで指定のJavaVersionを設定(set)し、「java -version」で確認してみます。

~ ❯❯❯ javaenv set 1.8 && java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)

~ ❯❯❯ javaenv set 11 && java --version
java 11.0.7 2020-04-14 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.7+8-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.7+8-LTS, mixed mode)

設定したJavaのVersionを確認することができました。
こっちの手順の方が楽だ!

コメント