如何在cygwin中快速切换JDK?

时间:2016-09-16 14:00:25

标签: java bash cygwin jdk1.6

在命令行上工作时(使用CYGWIN),我经常需要在不同版本的java之间切换。每次我需要切换时,是否有任何实用程序可以为我设置JAVA_HOME,PATH等?

2 个答案:

答案 0 :(得分:1)

为此,我使用了一个shell函数(bash,ksh等);函数在当前shell进程的上下文中执行,因此 会影响其环境:

# Switch current JDK (JAVA_HOME) on Cygwin
function jdkswitch {
    local version=$1
    local -a JDKS
    JDKS[8]='/cygdrive/c/apps/JDK/x64/jdk1.8.0_231'
    JDKS[11]='/cygdrive/c/apps/JDK/x64/jdk-11.0.5'

    if [[ -z ${version} ]] ; then
        echo "Current JDK: ${JAVA_HOME}"
        echo "Available JDKs: ${JDKS[*]}"
    else
        local jdkhome=${JDKS[${version}]}
        if [[ -d ${jdkhome} ]] ; then
            # Cygwin paths do not work for JAVA_HOME, must use Windows-style
            export JAVA_HOME=$(cygpath -w ${jdkhome})
            PATH=${jdkhome}/bin:${PATH}
            echo "Switched JDK to:"
            java -version
        else
            echo "Usage: jdkswitch version"
            echo "Available versions: ${!JDKS[*]}"
        fi
    fi
}

我通常将每个文件的功能保存到〜/ bin / functions中,然后将其加载到我的.profile中(bash缺少ksh的“自动加载”功能):

FPATH=~/bin/functions
for FUNC in ${FPATH}/* ; do
    . ${FUNC}
done

然后切换JDK很简单:

$ jdkswitch 11

那里有一个小错误,每次连续的切换都会添加到PATH,这可能是可以解决的,但有些技巧,但到目前为止我还没有遇到问题。

顺便说一句(由于问题指定的是Cygwin),这是MacOS版本:

# Switch current JDK (JAVA_HOME) based on available Mac installs
function jdkswitch {
    local version=$1
    local jdkhome
    if [[ -z ${version} ]] ; then
        /usr/libexec/java_home --verbose
    else
        jdkhome=$(/usr/libexec/java_home -v${version})
        if [[ -d ${jdkhome} ]] ; then
            export JAVA_HOME=${jdkhome}
            echo "Switched to ${JAVA_HOME}"
            java -version
        fi
    fi
}

答案 1 :(得分:0)

https://sdkman.io/install允许在JDK版本之间快速切换,并且与cygwin兼容