首页 文章

如何在OS X上设置或更改默认的Java(JDK)版本?

提问于
浏览
494

如何在mac上更改Java的默认版本?

22 回答

  • 26

    首先运行 /usr/libexec/java_home -V ,它将输出如下内容:

    Matching Java Virtual Machines (3):
    1.8.0_05, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
    1.6.0_65-b14-462, x86_64:   "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    1.6.0_65-b14-462, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    
    /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
    

    选择您想要成为默认版本的版本(参数为 1.6.0_65-b14-462 )然后:

    export JAVA_HOME=`/usr/libexec/java_home -v 1.6.0_65-b14-462`
    

    或者您只能指定主要版本,例如:

    export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
    

    现在当你运行 java -version 时,你会看到:

    java version "1.6.0_65"
    Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
    Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)
    

    只需将 export JAVA_HOME… 行添加到shell的init文件中即可 .

  • 30

    这个答案试图解决:在 macOS El Capitan or newer (Sierra, High Sierra, Mojave) 上为了开发目的安装 several versions of JDK 时如何 control java version system-wide (不仅仅是在当前运行的shell中) . 据我所知,目前的答案都没有(*) .

    作为开发人员,我使用了几个JDK,我想轻松地从一个JDK切换到另一个 . 通常我有最新的稳定的一般用途,其他用于测试 . 但我不希望系统(例如,当我启动我的IDE时)使用我现在拥有的最新“早期访问”版本 . 我想控制系统的默认值,这应该是最新稳定的 .

    以下方法至少与 Java 7 to 12 一起使用(在撰写本文时为早期访问),使用 Oracle JDKOpenJDK (包括builds by AdoptOpenJDK produced after mid-October 2018) .

    没有第三方工具的解决方案:

    • 将所有JDK保留在 /Library/Java/JavaVirtualMachines 下的默认位置 . 系统默认选择最高版本 .

    • To exclude a JDK from being picked by default, rename its Contents/Info.plist to Info.plist.disabled . 当 $JAVA_HOME 指向它或在脚本或配置中显式引用时,仍然可以使用该JDK . 它只会被系统的 java 命令忽略 .

    系统启动程序将使用具有 Info.plist 文件的最高版本的JDK .

    在具有备用JDK的shell中工作时,在现有答案中选择您的方法( jenv ,或围绕 /usr/libexec/java_home 的自定义别名/脚本等) .


    调查详情in this gist .


    (*)当前答案已过时(不再对macOS El Capitan或Sierra有效),或仅解决单个JDK,或者不解决系统范围问题 . 许多人解释了如何更改 $JAVA_HOME ,但这只会影响当前的shell以及从那里启动的内容 . 它赢得了很酷的全部,但据我所知它只是改变环境变量,所以它有同样的限制 .

  • 0

    除了上面的答案,我在我的 .bash_profile 中添加了以下几行,这使得切换非常方便(包括@ elektromin对java 9的评论):

    alias j12="export JAVA_HOME=`/usr/libexec/java_home -v 12`; java -version"
    alias j11="export JAVA_HOME=`/usr/libexec/java_home -v 11`; java -version"
    alias j10="export JAVA_HOME=`/usr/libexec/java_home -v 10`; java -version"
    alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
    alias j8="export JAVA_HOME=`/usr/libexec/java_home -v 1.8`; java -version"
    alias j7="export JAVA_HOME=`/usr/libexec/java_home -v 1.7`; java -version"
    

    插入后,执行 $ source .bash_profile

    我可以通过键入以下内容切换到Java 8:

    $ j8
    java version "1.8.0_102"
    Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
    Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
    
  • 1

    基于/ usr / libexec / java_home的小鱼函数

    function jhome
        set JAVA_HOME (/usr/libexec/java_home $argv)
        echo "JAVA_HOME:" $JAVA_HOME
        echo "java -version:"
        java -version
    end
    

    如果你不使用鱼,你可以在bash中做类似的事情:

    #!/bin/bash
    
    jhome () {
      export JAVA_HOME=`/usr/libexec/java_home $@`
      echo "JAVA_HOME:" $JAVA_HOME
      echo "java -version:"
      java -version
    }
    

    然后在javas之间切换:

    $> jhome           #switches to latest java
    $> jhome -v 1.7    #switches to java 1.7
    $> jhome -v 1.6    #switches to java 1.6
    

    ref:https://gist.github.com/kenglxn/1843d552dff4d4233271

  • 0

    使用jenv是一种简单的方法 .

    1.安装jenv

    curl -s get.jenv.io | bash
    

    2.Config jenv

    cd ~/.jenv/candidates/
        mkdir java
        cd java
        mkdir 1.7
        mkdir 1.8
    

    3.Symlink jdk路径

    ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin ~/.jenv/candidates/java/1.7
        ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin ~/.jenv/candidates/java/1.8
    

    你们都准备好了

    切换命令:

    jenv使用java 1.8

    默认设置:

    jenv默认java 1.7

  • 5

    这有点棘手,但请尝试按照Installing Java on OS X 10.9 (Mavericks)中描述的步骤进行操作 . 基本上,您必须将别名更新为 java .

    一步步:

    安装JDK 1.7后,您需要执行 sudo ln -snf 才能将链接更改为当前 java . 为此,请打开终端并发出命令:

    sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \
    /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
    

    请注意,目录 jdk1.7.0_51.jdk 可能会根据您安装的SDK版本而更改 .

    现在,您需要将 JAVA_HOME 设置为指向安装 jdk_1.7.0_xx.jdk 的位置 . 再次打开终端并输入:

    export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home"
    

    您可以在 .bashrc 文件中添加上面的 export JAVA_HOME 行,以便永久地在您的终端中安装Java

  • 1

    安装JDK,而不仅仅是JRE

    /usr/libexec/java_home -v 1.8
    

    /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
    

    下一个

    touch .bash_profile
    
    open -a TextEdit.app .bash_profile
    

    TextEdit将显示一个空白页面,您可以填写 .

    添加到doc: export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

    在终端:

    export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
    

    尝试命令:

    javac -version

    应该输出:

    javac 1.8.0_111
    
  • 22

    TL;博士

    添加行:

    export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'

    到文件

    ~/.bash_profile

    替换为您下载的版本 .

    然后 source ~/.bash_profile

  • 14
    function setjdk() {
      if [ $# -ne 0 ]; then
        removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
        if [ -n "${JAVA_HOME+x}" ]; then
          removeFromPath $JAVA_HOME
        fi
        export JAVA_HOME=`/usr/libexec/java_home -v $@`
        export PATH=$JAVA_HOME/bin:$PATH
      fi
    }
    

    把它放在你的〜/ .profile中并在你的终端中使用它,如 setjdk 1.8setjdk 1.7setjdk 9 等等......

    如果你没有 removeFromPath 那么它是:

    function removeFromPath() { export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;") }

  • 0

    来自Apple的官方java_home(1) man page

    **USAGE**
    
       /usr/libexec/java_home  helps  users  set a $JAVA_HOME in their login rc files, or provides a way for
       command-line Java tools to use the most appropriate JVM which can satisfy a minimum version or archi-
       tecture  requirement.  The --exec argument can invoke tools in the selected $JAVA_HOME/bin directory,
       which is useful for starting Java command-line tools from launchd plists without hardcoding the  full
       path to the Java command-line tool.
    
       Usage for bash-style shells:
              $ export JAVA_HOME=`/usr/libexec/java_home`
    
       Usage for csh-style shells:
              % setenv JAVA_HOME `/usr/libexec/java_home`
    
  • 10

    使用jenv,它就像一个Java环境管理器 . 它非常易于使用和清洁

    对于Mac,请按照以下步骤操作:

    brew install jenv
    
    git clone https://github.com/gcuisinier/jenv.git ~/.jenv
    

    安装:如果你使用bash跟着这些步骤:

    $ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
    
    echo 'eval "$(jenv init -)"' >> ~/.bash_profile
    
    $ exec $SHELL -l
    

    将所需版本的JVM添加到jenv:

    jenv add /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    

    jenv add /System/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home

    检查已安装的版本:

    jenv versions
    

    设置要使用的Java版本:

    jenv global oracle64-1.6.0
    
  • 155

    如果你仍然无法设置它 . 使用此命令 .

    export JAVA_HOME = /usr/libexec/java_home -v 1.8

    然后你必须使用这个 .

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

    它肯定会奏效 .

  • 3

    JDK切换脚本

    我已经调整了@Alex上面的答案,并编写了以下内容来修复Java 9的代码 .

    $ cat ~/.jdk
    #!/bin/bash
    
    #list available jdks
    alias jdks="/usr/libexec/java_home -V"
    # jdk version switching - e.g. `jdk 6` will switch to version 1.6
    function jdk() {
      echo "Switching java version $1";
    
      requestedVersion=$1
      oldStyleVersion=8
      # Set the version
      if [ $requestedVersion -gt $oldStyleVersion ]; then
        export JAVA_HOME=$(/usr/libexec/java_home -v $1);
      else
        export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`;
      fi
    
      echo "Setting JAVA_HOME=$JAVA_HOME"
    
      which java
      java -version;
    }
    

    切换到Java 8

    $ jdk 8
    Switching java version 8
    Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
    /usr/bin/java
    java version "1.8.0_131"
    Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
    

    切换到Java 9

    $ jdk 9
    Switching java version 9
    Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
    /usr/bin/java
    java version "9.0.1"
    Java(TM) SE Runtime Environment (build 9.0.1+11)
    Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
    
  • 49

    首先找出存储环境变量的位置 -

    • emacs

    • bash_profile

    • zshrc文件

    Steps to Set up the environment variable :-

    • 从JAVA下载jdk

    • 双击安装它

    • 现在在文件中设置环境变量

    一个 . 对于 emacs.profile ,您可以使用此link或参见下面的屏幕截图

    enter image description here

    b. For ZSH profile setup -

    1. export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home
    
    2. source ~/.zshrc - Restart zshrc to reflect the changes.
    
    3. echo $JAVA_HOME - make sure path is set up properly 
       ----> /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home
    
    4. java -version 
    
       -->  java version "1.8.0_112"  Java(TM) SE Runtime Environment (build 1.8.0_112-b16)Java HotSpot(TM) 64-Bit Server VM (build 25.112-b16, mixed mode)
    

    全部设置现在您可以轻松升级或降级JAVA版本..

  • 3

    如果你正在使用鱼并且你正在使用mac并且你希望能够在JDK之间切换,那么下面适用于mac .

    @ kenglxn的答案对我不起作用,我发现它bcos没有设置-g这是全局的!

    放在〜/ .config / fish / config.fish下面

    alias j8="jhome  -v 1.8.0_162"
    alias j9="jhome  -v 9.0.1"
    
    function jhome
        set -g -x JAVA_HOME (/usr/libexec/java_home $argv)
        echo "JAVA_HOME:" $JAVA_HOME
        echo "java -version:"
        java -version
    end
    
    funcsave jhome
    

    要了解您已安装的版本/次要版本,您可以执行以下操作:

    /usr/libexec/java_home -V                                                                              579ms  Wed 14 Feb 11:44:01 2018
    Matching Java Virtual Machines (3):
        9.0.1, x86_64:  "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
        1.8.0_162, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
        1.8.0_121, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
    
  • 4

    根据@markhellewell的回答,我创建了一些别名函数,可以帮到你 . 只需将这些添加到您的shell启动文件即可

    #list available jdks
    alias jdks="/usr/libexec/java_home -V"
    # jdk version switching - e.g. `jdk 6` will switch to version 1.6
    function jdk() { 
      echo "Switching java version"; 
      export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`; 
      java -version; 
    }
    

    https://gist.github.com/Noyabronok/0a90e1f3c52d1aaa941013d3caa8d0e4

  • 0

    /usr/libexec/java_home -V 给出的列表中包含单独安装的JDK的简单方法是对目录进行符号链接,如下所示:

    sudo ln -s path/to/jdk /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk
    

    例如,要注册Android Studio附带的JDK(撰写本文时为1.8.0_152),请使用:

    sudo ln -s /Applications/Android\ Studio.app/Contents/jre/jdk /Library/Java/JavaVirtualMachines/jdk-android-studio.jdk
    

    现在 java_home 将列出 Matching Java Virtual Machines 下的JDK,您可以按上述方法选择它 .

  • 881

    该工具将为您完成工作:

    http://www.guigarage.com/2013/02/change-java-version-on-mac-os/

    它是一个简单的JavaOne,可用于定义当前的Java版本 . 该版本可以在工具中选择版本后打开的shell中使用 .

  • 264

    如果您有多个版本,并且希望使用特定版本运行某些版本,请使用以下示例:

    /usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar
    
  • 5

    这是我在 Linux (Ubuntu / Mint队友)上的表现,我想Mac也可以这样做 .


    安装和配置

    Steps:

    • [Basic - part]

    • 手动下载jdk( .tgz 文件) .

    • 在适当的位置正确解压缩和重命名 .
      例如 /mnt/star/program/java/jdk-1.8

    • Build 一个软链接,稍后将更改为切换java版本 .
      例如 ln -s /mnt/star/program/java/jdk-1.8 /mnt/star/program/java/java
      因此 /mnt/star/program/java/java 是软链接 .

    • 在启动脚本中设置 JAVA_HOME .
      可以使用像 /etc/profile.d/eric.sh 这样的文件,或者只使用 ~/.bashrc .
      例如 JAVA_HOME=/mnt/star/program/java/java

    • 然后打开一个新的bash shell . java -version 应该打印java版本 .

    • [More version - part]

    • 根据需要下载并安装更多Java版本,与上述步骤类似 .
      例如
      /mnt/star/program/java/jdk-11

    • [Switch - part]

    • ~/.bashrc 中,为各种Java版本定义变量 .
      例如
      _E_JAVA_HOME_11='/mnt/star/program/java/jdk-11'
      _E_JAVA_HOME_8='/mnt/star/program/java/jdk-8'
      # dir of default version,
      _E_JAVA_HOME_D=$_E_JAVA_HOME_8

    • ~/.bashrc 中,使用define命令切换Java版本 .
      例如
      ## switch java version,
      alias jv11="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_11 $JAVA_HOME"
      alias jv8="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_8 $JAVA_HOME"
      # default java version,
      alias jvd="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_D $JAVA_HOME"
      alias jv="java -version"

    • 在终端中, source ~/.bashrc 使更改生效 .

    • 然后可以使用定义的命令进行切换 .


    命令 - 来自上面的配置

    Commands:

    • jv11
      切换到Java 11

    • jv8
      切换到Java 8

    • jvd
      切换到默认Java版本,由上面定义的 _E_JAVA_HOME_D 表示 .

    • jv
      显示java版本 .

    Example output:

    eric@eric-pc:~$ jv
    java version "1.8.0_191"
    Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
    
    eric@eric-pc:~$ jv11
    eric@eric-pc:~$ jv
    java version "11.0.1" 2018-10-16 LTS
    Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
    Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
    
    eric@eric-pc:~$ jvd
    eric@eric-pc:~$ jv
    java version "1.8.0_191"
    Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
    
    eric@eric-pc:~$
    

    机制

    • 通过更改软链接进行切换,该链接用作 JAVA_HOME .

    小贴士

    • 在我的机器上手动安装jdk时,我保留次要版本,然后与主要版本 Build 软链接,但没有次要版本 .
      例如
      //这是实际的目录,
      jdk1.8.0_191

    //这是到 jdk1.8.0_191 的软链接
    jdk-8

    //这是一个指向 jdk-8jdk-11 的软链接
    java

    • 我在 ~/.bashrc 中定义命令别名,但在单独的文件中定义变量 .
      我使用 ~/.eric_var 来定义变量, ~/.bashrc 将它来源(例如 source $HOME/.eric_var ) .
  • -5

    将以下命令添加到 ~/.zshenv 文件中

    export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
    
  • 2

    太容易解决方案:真是令人头疼 - 这很快简单的解决方案对我有用 .

    Mac OS Sierra版本10.12.13

    • 使用快捷键:CMD SHIFT G - 键入“/ Library /”

    • 找到JAVA文件夹

    • 右键单击Java文件夹=移至废纸篓(需要密码)

    • 安装:Java SE开发工具包8 jdk-8u131-macosx-x64.dmg | Download Javascript SDK

    • 确保新的JAVA文件夹出现在/ LIBRARY /

    • 安装Eclipse | Install Eclipse IDE for Java Developers

    • Boom完成

相关问题