5

我需要切换我的 Java 版本,Mac OS X 10.8.4但不确定如何,我现在拥有的版本是1.6.0_51,但我想切换到1.6.0_45

$java -版本
java版本“1.6.0_51”
Java(TM) SE 运行时环境 (build 1.6.0_51-b11-457-11M4509)
Java HotSpot(TM) 64 位服务器 VM(内部版本 20.51-b01-457,混合模式)

/usr/libexec/java_home -v 1.6.0_43
找不到任何与版本“1.6.0_43”匹配的 JVM。
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

1.6.0_43我假设我的mac上没有这样的版本?如何安装它然后切换到它?谢谢!

4

4 回答 4

11

要查看您安装了哪些版本,请使用:

/usr/libexec/java_home -V

例如为我展示了这个:

15:04 $ /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    10.0.1, x86_64: "Java SE 10.0.1"    /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
    1.7.0_80, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home

然后只需在您的~/.bashrcor中~/.bash_profile

$ export JAVA_HOME=$(/usr/libexec/java_home -v 1.7.0_80)

至于获得 1.6 版(或几乎任何以前的版本),我认为从这个日期(2018 年 11 月)开始,您将不走运。我可以访问https://jdk.java.net/8/,但任何早期版本都是 404(最新版本是 11)。我相信您可以进行更多搜索,但据我了解,一旦他们(Oracle)停止了某个版本,他们将不再维护它,因为这可能存在安全风险。

一旦你有了 DL 一个 Mac .dmg,我确信它会安装在正确的位置,并且可以通过 .dmg 看到java_home

https://stackoverflow.com/a/47699905/1019307上有信息讨论了使用homebrew安装 Java 并提到了 Java6(该帖子的日期为 2017 年 12 月)。

于 2018-11-19T04:27:19.203 回答
4

正如这个网站上的描述所说:“......通过shell在这个Java版本之间切换真的很痛苦......”所以这个人制作了一个工具来进行切换。因为我不知道你的推理(如果你真的必须通过命令行来做的话)它可能不是很有用,但是快速的谷歌搜索显示了这个可从他们的网站下载的工具。

于 2013-08-06T00:22:08.490 回答
1
  1. 安装您需要的其他 Java 版本。

  2. 我不得不在 1.6_XX 和 1.7_XX 之间切换,所以为此编写了一个小脚本。它的工作做得很好。您必须更换一些东西,但也许它可以帮助您:

    #!/bin/bash
    #v1.0.3
    #by Sapphire
    
    # /!\ Configuration /!\
    # vim ~/.bash_profile :
    # alias changej="sudo ~/Documents/changeJavaVers.sh"
    # sudo visudo -f /etc/sudoers :
    # #Custom privilege
    # user ALL=NOPASSWD: /Users/username/Documents/changeJavaVers.sh
    # change java dir's at (1) and (2)
    
    echo -e "\n***********************************************************"
    echo "*                EASY JAVA VERSION CHANGER                *"
    echo "***********************************************************"
    
    echo "Enter java version (6, 7, ..) or 'set' for settings"
    echo -n "Version: "
    read vers
    if [ "$vers" == "set" ]
    then
        echo "settings not implemented yet"
        #TODO open settings
        #set java home path, add java versions
        #current home: echo $JAVA_HOME
    elif (($vers == 6))
    then
        #(1)
        ln -fhsv /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
        export JAVA_HOME=`/usr/libexec/java_home -v 1.6+ -d32`
        echo -e "\n-----------------------------------------------------------"
        echo "                       JAVA VERSION"
        echo "-----------------------------------------------------------"
        java -version
        echo -e "\n-----------------------------------------------------------"
        echo "                        JAVA HOME"
        echo "-----------------------------------------------------------"
        echo $JAVA_HOME
        echo "***********************************************************"
    elif (($vers == 7))
    then
        #(2)
        ln -fhsv /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
        export JAVA_HOME=`/usr/libexec/java_home`
        echo -e "\n-----------------------------------------------------------"
        echo "                       JAVA VERSION"
        echo "-----------------------------------------------------------"
        java -version
        echo -e "\n-----------------------------------------------------------"
        echo "                        JAVA HOME"
        echo "-----------------------------------------------------------"
        echo $JAVA_HOME
        echo -e "\n***********************************************************"
    
    else
        echo -e "\ninvalid input - available java versions: 6, 7"
    fi
    

编辑 这里有一个更新的版本。在 OSX 10.9.3 上为我工作

#!/bin/bash
#v1.1.0
#last change: 12 June 2014
#by Sapphire

# /!\ Configuration /!\
# vim ~/.bash_profile :
# alias changej="sudo ~/Documents/changeJavaVers.sh"
# sudo visudo -f /etc/sudoers :
# #Custom privilege
# user ALL=NOPASSWD: /Users/username/Documents/changeJavaVers.sh
# change java directories (1), (2)

echo -e "\n***********************************************************"
echo "*                EASY JAVA VERSION CHANGER          v1.1.0 *"
echo "***********************************************************"

echo "Enter java version (6, 721, 745, 760) or 'set' for settings"
echo -n "Version: "
read vers
if [ "$vers" == "set" ]
then
    echo "settings not implemented yet"
    #TODO open settings
    #set java home path, add java versions
    #current home: echo $JAVA_HOME
elif (($vers == 6))
then
    #(1)
    ln -fhsv /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
elif (($vers == 721))
then
    #(1)
    ln -fhsv /Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
elif (($vers == 745))
then
    #(1)
    ln -fhsv /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
elif (($vers == 760))
then
    #(1)
    ln -fhsv /Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
else
    echo -e "\ninvalid input - available java versions: (6, 721, 745, 760)"
    exit
fi
#(2)
export JAVA_HOME='/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home'
echo -e "\n-----------------------------------------------------------"
echo "                       JAVA VERSION"
echo "-----------------------------------------------------------"
java -version
echo -e "\n-----------------------------------------------------------"
echo "                        JAVA HOME"
echo "-----------------------------------------------------------"
echo $JAVA_HOME
echo -e "\n***********************************************************"
exit
于 2014-06-11T09:31:16.757 回答
0

无需下载全新版本。你真正想要的是:

-target version
Generate class files that target a specified version of the VM. Class files will run on the specified target and on later versions, but not on earlier versions of the VM. Valid targets are 1.1, 1.2, 1.3, 1.4, 1.5 (also 5), 1.6 (also 6), and 1.7 (also 7).
The default for -target depends on the value of -source:

If -source is not specified, the value of -target is 1.7
If -source is 1.2, the value of -target is 1.4
If -source is 1.3, the value of -target is 1.4
If -source is 1.5, the value of -target is 1.7
If -source is 1.6, the value of -target is 1.7
For all other values of -source, the value of -target is the value of -source.  

这个来源。-target-source允许控制目标 JVM 和源代码级别。正如消息来源所说,值target将默认为您提供的值,但您可以根据需要控制两者。

如果此选项无法为您提供足够具体的版本,尽管我无法想象您为什么需要如此精确的版本,那么您只需要硬着头皮自己下载正确的版本

于 2013-08-06T00:32:12.257 回答