【问题标题】:how to switch java version on Mac OS 10.8.4如何在 Mac OS 10.8.4 上切换 java 版本
【发布时间】:2013-08-06 20:20:34
【问题描述】:

我需要在 Mac OS X 10.8.4 上切换 Java 版本,但不知道如何,我现在的版本是 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

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

【问题讨论】:

  • A(后来的)1.6.0 Java 版本应该在各方面与1.6.0 系列中的旧版本兼容,不是吗?你想完成什么?
  • 您说要切换到 1.6.0_45 但您搜索 1.6.0_43... 是哪个?
  • 有一个命令行选项可以让你设置正确的JVM(-target<release>source<release>
  • 我需要运行一个在 java 1.6.0_43 上运行良好但在 1.6.0_51 上运行良好的应用程序。 43 或 45 都有效,这是一个错字。

标签: java macos


【解决方案1】:

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

/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

然后只需在您的~/.bashrc~/.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 a Mac .dmg,我确信它会安装在正确的位置,并且可以通过 java_home 看到。

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

【讨论】:

【解决方案2】:

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

【讨论】:

    【解决方案3】:
    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
    

    【讨论】:

      【解决方案4】:

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

      -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.  
      

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

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

      【讨论】:

      • 它不起作用:javac -source 1.6.0_45 -target 1.6.0_45 javac:无效的源版本:1.6.0_45 用法:javac
      • @user468587 我的回答对寻找不太具体的选项的人很有用,为什么您需要任何与您所要求的一样具体的东西超出了我的范围,我相信 java 通常是向后兼容的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多