Java
Bash
Mac

javaのバージョン切り替えを簡単にする(Mac)

java のverison切り替えするのが少しだけ面倒でしたので、bashの関数にしてコマンドのように利用できるようにしました。

参考:
http://shinsuke789.hatenablog.jp/entry/2017/08/16/103000
https://qiita.com/ponsuke0531/items/795cd00d93b71c14d07b

bash追加内容

1.~/.bash_profile を編集

$vi ~/.bash_profile

2.下記を追記

~/.bash_profile
!/bin/bash

# PATH初期化
export PATH=/sbin:/bin:/usr/bin:/usr/local/bin:/usr/sbin

#~~~ 普段~/.bash_profileでやっている処理 ~~~
# ~/.use-java-version
if [ -f ~/.use-java-version ]; then
        export JAVA_HOME=$(cat ~/.use-java-version)
else
        # わたしはデフォルトはjava8にしている
        /usr/libexec/java_home -v 1.8 | tee ~/.use-java-version
        export JAVA_HOME=$(cat ~/.use-java-version)
fi
export PATH=$JAVA_HOME/bin:$PATH

function lsjava () {
        # インストール済みのjavaを出力
        echo -e "\033[0;33mInstalled java version:\033[0;39m"
        /usr/libexec/java_home -V
        # 現在利用中のjavaを出力
        echo -e "\n\033[0;33mCurrent specificed java version:\033[0;39m"
        java -version
}
function chjava () {
        # パラメータが指定されてなかったら
        if [ -z "$1" ]; then
                echo -e "Please specific java version. \nex)\n\$ chjava 1.8"
                return 1
        fi
        /usr/libexec/java_home -v $1
        local checkJavaVersion=$?
        # 指定したjavaバージョンがインストールされてなかったら
        if [ $checkJavaVersion -ne 0 ]; then
                echo "Please specific installed java version."
                echo Java $1 is not installed.
                return 2
        fi
        echo Use java $1.
        /usr/libexec/java_home -v $1 | tee ~/.use-java-version
        # ~/.use-java-versionに利用するjavaのpath出力されたので、上の方のif [ -f ~/.use-java-version ]のところで、PATHに追加されるようになる
        source ~/.bash_profile
        # PATHを表示
        echo PATH=$PATH
                # 利用中のjava versionを表示
        java -version
        return 0
}

3.修正したbash_profileを読み込み。

$source ~/.bash_profile

機能

java version切り替え

$chjava [javaのバージョン] で行う

#java10を指定
$chjava 10.0

#java8を指定
$chjava 1.8

エラーハンドリング

#パラメータを忘れた場合
$chjava
Please specific java version.
ex)
$ chjava 1.8

#インストールされていないjava versionが指定された場合
$chjava 1.9
Unable to find any JVMs matching version "1.9".
/Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
Please specific installed java version.
Java 1.9 is not installed.

現在インストール済みのjava version&利用中のversion

$lsjava で行う

$lsjava
Installed java version:
Matching Java Virtual Machines (3):
    10.0.1, x86_64: "Java SE 10.0.1"    /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
    1.8.0_121, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
    1.8.0_101, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home

Current specificed java version:
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)