java - 如何在cygwin中快速切换JDK?

标签 java bash cygwin java-6

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

最佳答案

我为此使用 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
}

关于java - 如何在cygwin中快速切换JDK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39533406/

相关文章:

bash - 将多个命令通过管道传输到单个命令,没有 EOF 信号等待

java - 使用 okHttp 发出 post 请求

java - json数据和spring View 名称如何一起返回

java - JDK 8 的类型推断如何与泛型一起工作?

git 别名清理/重置目录中的所有存储库

linux - 如何在 Cygwin 中重置 PATH 变量列表

java - 如何忽略登录表单上的Spring数据验证?

bash - 在多个文件中添加缺少的换行符

c - 使用共享内存时出现 "Bad system call"错误

php - 使用 Composer 在 Windows 8.1 上安装 Laravel