Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在cygwin中快速切换JDK?_Java_Bash_Cygwin_Jdk1.6 - Fatal编程技术网

Java 如何在cygwin中快速切换JDK?

Java 如何在cygwin中快速切换JDK?,java,bash,cygwin,jdk1.6,Java,Bash,Cygwin,Jdk1.6,在命令行上工作时(使用CYGWIN),我经常需要在不同版本的java之间切换。是否有任何实用程序可以在每次需要切换时为我设置JAVA_HOME、PATH等?允许在JDK版本之间快速切换,并且与cygwin兼容我为此使用shell(bash、ksh等)函数;函数在当前shell进程的上下文中执行,因此会影响其环境: # Switch current JDK (JAVA_HOME) on Cygwin function jdkswitch { local version=$1 loc

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

允许在JDK版本之间快速切换,并且与cygwin兼容

我为此使用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的“自动加载”功能):

然后切换JDK只需:

$ jdkswitch 11
这里有一个小错误,每次连续的开关都会预加到路径上,可能通过一些技巧可以修复,但我迄今为止还没有遇到过问题

另外(因为问题指定了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
}

JAVA_HOME、PATH等是环境变量。如果从命令行运行程序,该程序可以更改其自身的环境,并且这些更改将由它生成的任何进程继承,但它无法更改启动它的shell的环境。我将创建一个shell脚本,我可以从命令行
source
# 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
}