繁体   English   中英

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

[英]How to set or change the default Java (JDK) version on macOS?

如何在 Mac 上更改 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

选择您想要的默认版本( 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 文件中。

对于 Bash(如antonyh 所述):

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

对于鱼(如 ormurin 所述)

set -x JAVA_HOME (/usr/libexec/java_home -d64 -v1.8)

更新 .zshrc 文件应该可以工作:

nano ~/.zshrc

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

按 CTRL+X 退出编辑器 按 Y 保存更改

source ~/.zshrc
echo $JAVA_HOME
java -version

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

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

以下方法至少适用于Java 7 到 12 (在撰写本文时早期访问),适用于Oracle JDKOpenJDK (包括AdoptOpenJDK 在 2018 年 10 月中旬之后生成的构建)。

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

  • 将所有 JDK 保留在/Library/Java/JavaVirtualMachines下的默认位置。 系统默认选择最高版本。
  • 要在默认情况下排除 JDK,请将其Contents/Info.plist重命名为Info.plist.disabled $JAVA_HOME指向 JDK 或在脚本或配置中显式引用时,该 JDK 仍然可以使用。 它只会被系统的java命令忽略。

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

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


调查细节在此要点


(*) 当前答案要么已过时(不再对 macOS El Capitan 或 Sierra 有效),要么仅针对单个 JDK,或者不针对系统范围的方面。 许多人解释了如何更改$JAVA_HOME ,但这只会影响当前的 shell 以及从那里启动的内容。 它不会影响从操作系统启动器启动的应用程序(除非您更改正确的文件并注销/登录,这很乏味)。 jenv 也一样,它很酷,但据我所知,它只是改变了环境变量,所以它有同样的限制。

除了上述答案之外,我还在我的.bash_profile (或 MacOS .zshrc的 .zshrc )中添加了以下几行,这使得切换非常方便(包括@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)

一个基于/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

如果你不使用fish,你可以在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

参考: https ://gist.github.com/kenglxn/1843d552dff4d4233271

使用jenv是一种简单的方法。 (2022 年更新)

  1. 安装 jenv:请参阅入门

  2. 用brew安装java

     brew install openjdk@11 ln -s /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk #other java brew install openjdk@8 brew install openjdk@17
  3. 将 java 添加到 jenv

     jenv add /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home
  4. 使用:参考jenv

这有点棘手,但请尝试按照在 OS X 10.9 (Mavericks) 上安装 Java 中描述的步骤进行操作。 基本上,您必须将别名更新为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

安装 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 将显示一个空白页面,您可以填写该页面。

添加到文档: 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

更新...

在 macOS Monterey 中,v12.0.1 Cask 不再是 Brew 命令。 只需按照步骤操作,但在步骤 4 中只需执行$ brew install ...$ brew install --cask ...而不是$ brew cask install ...感谢@Shivam Sahil评论。

我将分享我使用 macOS Big Sur v11.4 的经验,处理这些问题的最佳方法是使用 Homebrew 安装 java:

1 - 安装自制软件。

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2 - 安装 Homebrew Cask。

$ brew tap homebrew/cask-versions 
$ brew update 
$ brew tap homebrew/cask

3 - 安装最新版本的 Java

$ brew cask install java

4 - 安装其他需要的 Java 版本(Java8、Java11、Java13)。

$ brew tap adoptopenjdk/openjdk

$ brew cask install adoptopenjdk8
$ brew cask install adoptopenjdk11
$ brew cask install adoptopenjdk13
$ brew cask install adoptopenjdk14

5 - 在不同版本的 Java 之间切换

在不同版本的 Java 之间切换,您只需将以下内容添加到您的.bash_profile.zshrc中。

在这种情况下,我们希望能够在 Java8、Java11、Java13 和 Java14 之间切换:

export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
export JAVA_13_HOME=$(/usr/libexec/java_home -v13)
export JAVA_14_HOME=$(/usr/libexec/java_home -v14)

alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java11='export JAVA_HOME=$JAVA_11_HOME'
alias java13='export JAVA_HOME=$JAVA_13_HOME'
alias java14='export JAVA_HOME=$JAVA_14_HOME'

# default to Java 14
java14

6 - 重新加载.bash_profile.zshrc以使别名生效:

$ source ~/.bash_profile

或者

$ source ~/.zshrc

7 - 最后,您可以使用别名在不同的 Java 版本之间切换。

$ java8
$ java -version
java version "1.8.0_261"

有关更多信息,您可以查看这篇文章:如何使用 Brew 在 Mac 上安装 Java

tl;博士

添加行:

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

到文件

~/.bash_profile

(将 jdk1.8.0_144.jdk 替换为您下载的版本)

然后source ~/.bash_profile

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

对于使用默认进程的人来说,使用终端的四个简单步骤.. :)

  1. echo $JAVA_HOME为您提供当前的 java home。 例如: /Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/

  2. cd /Library/Java/JavaVirtualMachines/将带您到您通常安装 jdks 的文件夹(您的机器可能会有所不同)

  3. ls显示可用的文件夹(通常会有版本号,例如: jdk1.8.0_191.jdk openjdk-11.0.2.jdk
  4. export JAVA_HOME='/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home'将改变java home..

macOS El Capitan或更高版本将选择/Library/Java/JavaVirtualMachines中可用的更高版本的 JDK,因此为了降级,您可以将文件Info.plist重命名为Info.plist.disabled之类的其他名称,以便操作系统选择以前的版本。

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:?;;") }

考虑以下方法来更改终端的每个特定选项卡的 JDK(即: iTerm )。

/Library/Java/JavaVirtualMachines路径中有以下两个 jdks

  • openjdk8u275-b01
  • openjdk-11.0.9.1+1

.bash_profile文件中如下:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-11.0.9.1+1/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

如果您打开Iterm - 使用第一个选项卡 A - 并执行以下命令:

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)

输出正确且符合预期

但是,如果您打开第二个选项卡 B并且需要覆盖默认JDK,则在终端中写入以下内容:

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)

它工作正常。 当然,如果选项卡 B已关闭或您打开一个新选项卡 C ,所有工作都根据.bash_profile设置(因此默认设置)

您可以将其添加到您的 .bash_profile 以默认设置版本。

//Open bash profile
open ~/.bash_profile

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

// run bash profile
source ~/.bash_profile

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

export JAVA_HOME=`/usr/libexec/java_home -v 1.8` 
  1. 将以下代码行添加到您的.zshrc (或bash_profile ):

别名 j='f(){ 导出 JAVA_HOME= /usr/libexec/java_home -v $1 };f'

  1. 保存到会话:

$源.zshrc

  1. 运行命令(例如 j 13、j14、j1.8...)

$ j 1.8

说明这是参数化的,因此您不需要像发布的其他解决方案那样更新脚本。 如果你没有安装 JVM,你会被告知。 以下示例案例:

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

来自 Apple 的官方java_home(1) 手册页

**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`

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)

在您的~/.bash_profile中添加以下内容并相应地设置默认 java 版本。

export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)

alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java11='export JAVA_HOME=$JAVA_11_HOME'

# default to Java 8
java8

我正在使用 macOS 并使用brew安装了 java。

编辑:如果您不使用bash ,请更新正确的 shell 文件,例如,如果您使用的是zsh ,那么它将是~/.zshrc

如果仍然无法设置它。 使用这个命令。

导出 JAVA_HOME= /usr/libexec/java_home -v 1.8

那么你必须使用这个。

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

它肯定会奏效。

首先找出你在哪里存储环境变量 -

  1. emacs
  2. bash_profile
  3. .zshrc 文件

设置环境变量的步骤:-

  1. 从 JAVA 下载 jdk

  2. 双击安装

  3. 现在在你的文件中设置环境变量

    一个。 对于emacs.profile ,您可以使用此链接或查看下面的屏幕截图

在此处输入图像描述

湾。 对于 ZSH 配置文件设置 -

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

如果您使用的是fish并且您使用的是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

如果您有多个版本并且想要使用特定版本来运行某些东西,请使用以下示例:

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

以前我在 .zshrc 中使用别名来轻松切换版本,但今天我使用 SDKMAN。 SDKMAN 还可以处理为系统设置默认java,以及下载和安装新的java 版本。

安装 sdkman 后,您可以执行类似于使用 nvm 工具处理节点版本的命令。

sdk list java将列出您系统上可用的 java 版本以及可在线安装的 java 版本,包括您可以在sdk usesdk defaultsdk install命令中使用的标识符。

例如安装 Amazon Corretto 11.0.8 并询问它是否应该是新的默认设置: sdk install java 11.0.8-amzn

我也经常使用的一个特性是.sdkmanrc文件。 如果您将它放在您机器上的一个目录中并在该目录中运行sdk env命令,那么您可以配置仅在该目录中使用的工具版本。 也可以使用sdkman_auto_env=true配置自动使 sdkman 切换工具版本。

sdkman 还支持处理 JVM 的其他工具,例如 gradle、kotlin、maven 等。

有关更多信息,请查看https://sdkman.io/usage#env

基于@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

这是我在我的Linux (Ubuntu / Mint mate)上的做法,我猜 Mac 也可以这样做。


安装和配置

脚步:

  • [基础-部分]
  • 手动下载 jdk .tgz文件)
  • 在适当的位置正确解压缩和重命名。
    例如/mnt/star/program/java/jdk-1.8
  • 做一个软链接,后面改成切换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 版本。
  • [更多版本-部分]
  • 根据需要下载并安装更多 Java 版本,与上述步骤类似。
    例如
    /mnt/star/program/java/jdk-11
  • [开关-部分]
  • ~/.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中,定义切换 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使更改生效。
  • 然后可以使用定义的命令进行切换。

命令 - 从上面的配置

命令:

  • jv11
    切换到 Java 11
  • jv8
    切换到 Java 8
  • jvd
    切换到默认的 Java 版本,由上面定义的_E_JAVA_HOME_D表示。
  • jv
    显示 java 版本。

示例输出:

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时,我保留了次要版本,然后与主要版本建立了软链接,但没有次要版本。
    例如
    // 这是实际的目录,
    jdk1.8.0_191

    // 这是一个指向jdk1.8.0_191的软链接
    jdk-8

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

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

/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,您可以如上所述选择它。

在bashrc或者zshrc中加入这个函数, java-change [version]选择JDK

# set and change java versions
function java-change() {
  echo "----- old java version -----"
  java -version
  if [ $# -ne 0 ]; then
    export JAVA_HOME=`/usr/libexec/java_home -v $@`
    export PATH=$JAVA_HOME/bin:$PATH
  fi
  echo "----- new java version -----"
  java -version
}

检查Java版本:java -version

在版本之间切换: https ://devqa.io/brew-install-java/

打开 ~/.bash_profile

导出 JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)

导出 JAVA_11_HOME=$(/usr/libexec/java_home -v11)

别名 java8='export JAVA_HOME=$JAVA_8_HOME' 别名 java11='export JAVA_HOME=$JAVA_11_HOME'

源〜/ .bash_profile

当我们切换到 java11 或 java8 时,java -version 命令没有显示正确的版本。

在这种情况下,使用 mvn -version 查看用于构建解决方案的正确 java 版本

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

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

非常简单的答案:

  1. 运行并获取所有已安装的JDK路径
/usr/libexec/java_home -V
  1. jenv.be运行直接命令
git clone https://github.com/jenv/jenv.git ~/.jenv #Linux/macOS
OR
brew install jenv #macOS

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

jenv add PATH_FROM_STEP_1

我正在使用我写的这个功能:

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

它基本上自动化了这个答案中的步骤,类似于这个,但也负责设置 PATH。

只需将它放在.config/fish/functions/中,然后像这样使用它:

javav 11 # Sets to Java 11
javav 16 # Sets to Java 16
  1. 打开终端
  2. 粘贴: nano ~/.zshrc
  3. 设置您安装的 Java 版本(例如使用11.0.11 ): export JAVA_HOME=$(/usr/libexec/java_home -v 11.0.11)
  4. 使用control+X保存文件。 当它提示时只需输入"Y"
  5. 在点击Return之后,您就可以开始了。
  6. 不要忘记检查结果: java -version

太简单的解决方案:多么令人头疼 - 这是一个对我有用的快速简单的解决方案。

Mac OS Sierra 版本 10.12.13

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

  2. 找到 JAVA 文件夹

  3. 右键单击 Java 文件夹 = 移至垃圾箱(需要密码)

  4. 安装:Java SE 开发工具包 8 jdk-8u131-macosx-x64.dmg | 下载 JavaScript SDK

  5. 确保新的 JAVA 文件夹出现在 /LIBRARY/
  6. 安装 Eclipse | 为 Java 开发人员安装 Eclipse IDE
  7. 繁荣完成

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM