Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在macOS上设置或更改默认Java(JDK)版本?_Java_Macos - Fatal编程技术网

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

如何在macOS上设置或更改默认Java(JDK)版本?,java,macos,Java,Macos,如何在mac上更改Java的默认版本?这有点棘手,但请尝试按照中描述的步骤操作。基本上,您必须将别名更新为java 逐步: 安装JDK1.7后,您需要执行sudo ln-snf,以便将链接更改为当前java。为此,打开终端并发出以下命令: sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \ /System/Library/Frameworks/JavaVM.framework/Versions/Cur

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

这有点棘手,但请尝试按照中描述的步骤操作。基本上,您必须将别名更新为
java

逐步:

安装JDK1.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

第一次运行
/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
$ 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)
export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-11.0.9.1+1/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
javac -version
javac 11.0.9.1

java -version
openjdk version "11.0.9.1" 2020-11-04
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.9.1+1)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.9.1+1, mixed mode)
export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk8u275-b01/Contents/Home/
export PATH=$JAVA_HOME/bin:$PATH
选择要作为默认版本的版本(
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\u HOME…
行添加到shell的init文件中

对于Bash(如所述):

鱼类(如ormurin所述)

更新.zshrc文件应该可以:

nano ~/.zshrc

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0)
按CTRL+X退出编辑器 按Y键保存更改

source ~/.zshrc
echo $JAVA_HOME
java -version

此工具将为您完成以下工作:

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

来自苹果官方:


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

/usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar
使用是一种简单的方法

  • 安装jenv,请参阅

  • 配置jenv

    cd ~/.jenv/candidates/
    mkdir java
    cd java
    mkdir 1.7
    mkdir 1.8
    
  • 符号链接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 use java 1.8
    
    设置默认值:

    jenv default java 1.7
    

    基于/usr/libexec/java_home的小型fish函数

    function jhome
        set JAVA_HOME (/usr/libexec/java_home $argv)
        echo "JAVA_HOME:" $JAVA_HOME
        echo "java -version:"
        java -version
    end
    
    如果不使用fish,可以在bash中执行类似的操作:

    #!/bin/bash
    
    jhome () {
      export JAVA_HOME=`/usr/libexec/java_home $@`
      echo "JAVA_HOME:" $JAVA_HOME
      echo "java -version:"
      java -version
    }
    
    然后,要在Java之间切换,请执行以下操作:

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

    参考:

    安装JDK,而不仅仅是JRE

    /usr/libexec/java_home -v 1.8
    
    给予

    下一个

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

    添加到文档:
    export JAVA_HOME=/Library/JAVA/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/HOME

    在终端:

    export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
    
    请尝试以下命令:

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

    应输出:

    javac 1.8.0_111
    

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

    插入后,执行
    $source.bash\u profile

    我可以通过键入以下命令切换到Java 8:

    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
    
    $ 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)
    
    export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-11.0.9.1+1/Contents/Home
    export PATH=$JAVA_HOME/bin:$PATH
    
    javac -version
    javac 11.0.9.1
    
    java -version
    openjdk version "11.0.9.1" 2020-11-04
    OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.9.1+1)
    OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.9.1+1, mixed mode)
    
    export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk8u275-b01/Contents/Home/
    export PATH=$JAVA_HOME/bin:$PATH
    

    基于@markhellewell answer,我创建了两个别名函数,可以为您实现这一点。只需将它们添加到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; 
    }
    

    将其放入~/.profile中,并在终端中使用,如so
    setjdk 1.8
    setjdk 1.7
    setjdk 9

    如果没有
    removeFromPath
    ,则为:

    
    函数removeFromPath(){
    导出路径=$(echo$PATH | sed-E-E“s;:$1;;“-E”s;$1:?;”)
    }
    

    使用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
    

    太简单的解决方案:多头痛啊——这是一个对我有效的快速简单的解决方案

    Mac OS Sierra版本10.12.13

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

  • 查找JAVA文件夹

  • 右键单击Java文件夹=移动到垃圾箱(需要密码)

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

  • 确保新的JAVA文件夹显示在/LIBRARY中/
  • 安装Eclipse |
  • 隆隆声

  • 这个答案试图解决以下问题:当在macOS El Capitan或更新版本(Sierra、High Sierra、Mojave)上安装了用于开发目的的多个JDK版本时,如何控制系统范围内的java版本(不仅仅是在当前运行的shell中)。据我所知,目前没有一个答案是这样的(*)

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

    以下方法至少适用于Java7到12(撰写本文时的早期访问),适用于OracleJDKOpenJDK(包括)

    无第三方工具的解决方案:
    • 将所有JDK保留在它们的默认位置,在
      /Library/Java/JavaVirtualMachines
      下。默认情况下,系统将选择最高版本
    • 要在默认情况下排除JDK,请将其
      Contents/Info.plist
      重命名为
      Info.plist.disabled
      。当
      $JAVA_HOME
      指向JDK,或者在脚本或配置中显式引用JDK时,仍然可以使用该JDK。它将被系统的
      java
      命令忽略
    系统启动器将使用具有
    Info.plist
    文件的JDK中版本最高的JDK

    在使用备用JDK的shell中工作时,从现有答案(
    jenv
    )或
    /usr/libexec/java周围的自定义别名/脚本中选择您的方法
    
    $ 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)
    
    $ 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)
    
    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
    
    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)
    
    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:~$ 
    
    sudo ln -s path/to/jdk /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk
    
    sudo ln -s /Applications/Android\ Studio.app/Contents/jre/jdk /Library/Java/JavaVirtualMachines/jdk-android-studio.jdk
    
    export JAVA_HOME=`/usr/libexec/java_home -v 1.8` 
    
    //Open bash profile
    open ~/.bash_profile
    
    export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
    
    // run bash profile
    source ~/.bash_profile
    
    export JAVA_8_HOME=(/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/)
    export JAVA_13_HOME=(/Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home/)
    
    alias java8='export JAVA_HOME=$JAVA_8_HOME; alias java="$JAVA_8_HOME/bin/java"; $JAVA_8_HOME/bin/java -version'
    alias java13='export JAVA_HOME=$JAVA_13_HOME; alias java="$JAVA_13_HOME/bin/java"; $JAVA_13_HOME/bin/java -version'
    
    export JAVA_HOME=$JAVA_13_HOME
    
    /Users/user/IDE/project $ j 1.8
    /Users/user/IDE/project $ java -version
    openjdk version "1.8.0_265"
    OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_265-b01)
    OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.265-b01, mixed mode)
    /Users/user/IDE/project $ j 13
    /Users/user/IDE/project $ java -version
    openjdk version "13.0.2" 2020-01-14
    OpenJDK Runtime Environment (build 13.0.2+8)
    OpenJDK 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing)
    /Users/user/IDE/project $ j 1.7
    Unable to find any JVMs matching version "1.7".
    
    export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-11.0.9.1+1/Contents/Home
    export PATH=$JAVA_HOME/bin:$PATH
    
    javac -version
    javac 11.0.9.1
    
    java -version
    openjdk version "11.0.9.1" 2020-11-04
    OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.9.1+1)
    OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.9.1+1, mixed mode)
    
    export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk8u275-b01/Contents/Home/
    export PATH=$JAVA_HOME/bin:$PATH
    
    javac -version
    javac 1.8.0_275
    
    java -version
    openjdk version "1.8.0_275"
    OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_275-b01)
    OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.275-b01, mixed mode)
    
    function javav
      set min_version 8
      set max_version 99
      set java_home_cmd '/usr/libexec/java_home 2>/dev/null --failfast --version'
    
      if ! test (eval $java_home_cmd $argv)
        echo "Version not found"
        return 1
      end
    
      for current_version in (seq $min_version $max_version)
        set path_to_remove (eval $java_home_cmd $current_version)
        if ! test -z $path_to_remove
          echo 'Removing' $path_to_remove 'from PATH'
          set PATH (string match --invert $path_to_remove/bin $PATH)
        end
      end
    
      echo 'Setting up env for Java' $argv
      set -x JAVA_HOME (eval $java_home_cmd $argv)
      set PATH $JAVA_HOME/bin $PATH
    end
    
    
    javav 11 # Sets to Java 11
    javav 16 # Sets to Java 16