Mac系统自由切换系统中的Java JDK版本

原创
04/16 11:26
阅读数 25

由于项目原因,在系统中安装了多个版本的JDK,在不同repo中切换很费劲,所以搜索了很多切换JDK的方法,包括一下脚本,都不是很好用,后来综合各种方案,进行了一些修改,实现了动态获取系统JDK并且自由切换的功能。

现在分享出来,有遇到相同困扰的同学不妨尝试一下

PS:(我使用了zsh作为Mac的命令行工具,如果有command不兼容的情况,大家不妨先安装一下zsh,很好用,对git很多指令都有快捷写法)

步骤1:将以下函数复制到〜/ .bash_profile

# Function to switch JDK versions
function setjdk() {
    echo "Select the java version you wish to switch to from the following:"
    echo
    options=()
    count=0

        while IFS= read -r line
        do
            if [[ ! "$line" == M* ]] && [[ ! "$line" == /* ]] && [[ ! -z "$line" ]]; then
                typeset -A options
                options["$count"]="$line"
                echo '['"$count"']'${options["$count"]}
                ((count++))
            fi
        done < <(/usr/libexec/java_home -V 2>&1)

    echo
    echo "Please chose a value from the options above: "
    local selectedOption=$1
    vared selectedOption
    if [ "$count" -ge "$selectedOption" ] && [ "$selectedOption" -ge '0' ]; then
        removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
        removeFromPath "$JAVA_HOME/bin"
        jdkFullString=(${options["$selectedOption"]})
        jdkTemp=`echo $jdkFullString | awk -F"\t" '{print $1}'`
        jdkVersion=`echo $jdkTemp | awk -F"," '{print $1}'`
    export JAVA_HOME=$(/usr/libexec/java_home -v $jdkVersion)
        export PATH="$JAVA_HOME"/bin:$PATH
    echo "JAVA_HOME is set to be ${JAVA_HOME}"
    else
        echo "Invalid option, JAVA_HOME was not set"
    fi
}

function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
}

步骤2:保存文件并打开一个新的终端窗口

将上述功能添加到〜/ .bash_profile后,所有新打开的终端窗口将能够直接调用它们。

当前窗口可以使用 source 指令进行重新加载

source .bash_profile

步骤3:执行功能

在命令行输入 setjdk

setjdk

应该看到已安装的Java版本的列表,并提示您选择一个。下面显示了我自己在系统中安装的三个不同Java版本的JDK。

Select the java version you wish to switch to from the following:

[0]    11.0.6, x86_64:	"Java SE 11.0.6"	/Library/Java/JavaVirtualMachines/jdk-11.0.6.jdk/Contents/Home
[1]    1.8.0_231, x86_64:	"Java SE 8"	/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home
[2]    1.8.0_162, x86_64:	"Java SE 8"	/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home

Please chose a value from the options above:

然后输入对应的编号即可,例如我想要切换到JDK1.8.0_231, 就输入 1

1

然后可以看到指令打印如下,即切换成功

JAVA_HOME is set to be /Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home

最后可以使用java -version来验证一下是否JDK版本真的设置成功

java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部