添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I need to switch the Java version on my Mac OS X 10.8.4 but am not sure how, the version I have right now is 1.6.0_51 but i want to switch to 1.6.0_45 :

$java -version java version "1.6.0_51" Java(TM) SE Runtime Environment (build 1.6.0_51-b11-457-11M4509) Java HotSpot(TM) 64-Bit Server VM (build 20.51-b01-457, mixed mode) /usr/libexec/java_home -v 1.6.0_43 Unable to find any JVMs matching version "1.6.0_43". /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

I assume there is no such a version as 1.6.0_43 on my mac? how can install it and then switch to it? thanks!

A (later) 1.6.0 Java version should be compatible in every way with an older version from the 1.6.0 series, shouldn't it? What are you trying to accomplish? Danilo Piazzalunga Aug 6, 2013 at 0:25 There is a command line option that allows you to set the correct JVM ( -target<release> and source<release> ) aaronman Aug 6, 2013 at 0:29 i need to run an application that runs well with java 1.6.0_43 but not with 1.6.0_51. 43 or 45 both works, it's a typo. user468587 Aug 6, 2013 at 0:36
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

Then simply in your ~/.bashrc or ~/.bash_profile:

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

As for getting version 1.6 (or nearly any prev version) I think that as of this date (Nov 2018) you will be out of luck. I can get to https://jdk.java.net/8/ but any earlier version is a 404 (11 is the latest). I'm sure you could search a bit more though as I understand it, once they (Oracle) have discontinued a version, they no longer maintain it since it could be a security risk.

Once you have DL a Mac .dmg, I'm sure it installs in the correct location and will be visible with java_home.

There is information at https://stackoverflow.com/a/47699905/1019307 that discusses using homebrew to install Java and it mentions Java6 (the post is dated Dec 2017).

As the description says on this website: "...it’s really a pain to switch between this Java version by shell..." so this person made a tool to do the switching. Since I don't know your reasoning (if you really have to do it via the command line) it may not be overly useful but a quick google search revealed this downloadable tool from their website.

  • Install an other Java version, that you need.

  • I had to switch between 1.6_XX and 1.7_XX so wrote a litte script for that. It does its job pretty good. You have to replace some stuff but maybe it helps you:

    #!/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" ]
        echo "settings not implemented yet"
        #TODO open settings
        #set java home path, add java versions
        #current home: echo $JAVA_HOME
    elif (($vers == 6))
        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))
        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***********************************************************"
        echo -e "\ninvalid input - available java versions: 6, 7"
    Got a newer version here. Works for me on 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" ]
        echo "settings not implemented yet"
        #TODO open settings
        #set java home path, add java versions
        #current home: echo $JAVA_HOME
    elif (($vers == 6))
        ln -fhsv /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
    elif (($vers == 721))
        ln -fhsv /Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
    elif (($vers == 745))
        ln -fhsv /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
    elif (($vers == 760))
        ln -fhsv /Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
        echo -e "\ninvalid input - available java versions: (6, 721, 745, 760)"
    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***********************************************************"
    

    There is no need to download a whole new version. What you really want is this:

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

    from this source. -target and -source allow to control the target JVM and source code level. As the source says the value of target will default to the value you give source but you can control both if you want.

    If this option can't provide a specific enough version for you, though I can't imagine why you would need such an exact version, then you'll just have to bite the bullet and download the right version yourself

    it didn't work : javac -source 1.6.0_45 -target 1.6.0_45 javac: invalid source release: 1.6.0_45 Usage: javac <options> <source files> – user468587 Aug 6, 2013 at 18:59 @user468587 my answer is useful for people looking for a less specific option, why you would need anything as specific as what you are asking is beyond me, java is usually backwards compatable I believe – aaronman Aug 6, 2013 at 19:21

    Thanks for contributing an answer to Stack Overflow!

    • Please be sure to answer the question. Provide details and share your research!

    But avoid

    • Asking for help, clarification, or responding to other answers.
    • Making statements based on opinion; back them up with references or personal experience.

    To learn more, see our tips on writing great answers.

  •