ChatGPT解决这个技术问题 Extra ChatGPT

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

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

执行 /usr/libexec/java_home 告诉您什么?
/usr/libexec/java_home 返回 /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
可能你只需要重新启动。你试过吗?
是的,重新启动了计算机和终端......没有变化。
您能否接受下面@markhellewell 的高票回答?它会帮助我更快地找到它,而且很好。 :)

A
Aakash

首先运行 /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 的初始化文件中。

对于 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

这些确实是 export 行的反引号
这对我不起作用。从运行 java_home -V 中获取路径并将其添加到导出命令中,例如 export JAVA_HOME="/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home"
这适用于 Bash - export JAVA_HOME=$(/usr/libexec/java_home -v 1.8) - 另请注意,java_home 允许部分匹配,因此您不必包含完整版本,因为它会找到最新安装的。这使更新更容易。
确保您使用 ` ` 而不是 ' ' 进行导出。
我希望每次我必须谷歌“os x switch java version”并回到这里时都可以投票
H
Hugues M.

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

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

以下方法至少适用于 Java 7 到 12(在撰写本文时是早期访问),适用于 Oracle JDKOpenJDK(包括builds by AdoptOpenJDK produced after mid-October 2018)。

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

将所有 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 的自定义别名/脚本等)中选择您的方法。

调查详情in this gist

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


这是我一直在寻找的答案,因为 jenvJAVA_HOME 都能够设置系统范围的 java 版本,即 Eclipse 将使用的那个。
@Rodrigo 是的,如“调查细节”(上面链接)中所述:“安装 JDK 也会覆盖 /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/。显然这是新的首选项窗格将启动的 - 这是我发现的唯一例外解决方案:那个东西仍将使用 JDK9(我安装的最新版本),但没有其他 Java 应用程序使用。”
值得注意的是,在 /Library/Java/JavaVirtualMachines 中可以找到 Java 版本,并且上述出色的工作解决方案就在该上下文中。
确切地说,这是这个问题的最佳和最实用的解决方案。不幸的是。
我非常感谢你的回答。这修复了从操作系统启动器启动应用程序的问题。
r
rhyswilliamsza

除了上述答案之外,我还在我的 .bash_profile(或 MacOS 10.15+ 的 .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)

这是 Java 9 的语法:alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
用于快速切换的令人敬畏的简单别名。
使用 alias j10="export JAVA_HOME=`/usr/libexec/java_home`; java -version" 然后键入 j10 可以切换回 Java 的当前版本(在我的例子中是 Java 10)
我会制作一个类似于 nvm 的 cli 工具来切换 Java 版本,但首字母缩略词 jvm 已经有其他含义了 :)
采购时出现此错误:/Users/me/.zshrc:8: permission denied: /Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home
k
kenglxn

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


这只会针对特定的终端会话而改变。有没有办法更新它以在系统范围内更改它?
我必须写 export JAVA_HOME=(/usr/libexec/java_home $argv) 而不是 jhome 函数的第二行。
Y
Yuantao

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

安装 jenv:请参阅使用 brew brew install openjdk@11 ln -s /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk #other java brew 安装 java install openjdk@8 brew install openjdk@17 添加java到jenv jenv add /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home 使用:参考jenv


干净而漂亮的解决方案。
我不得不使用“jenv shell 1.8”,而不是“jenv use java 1.8”。根据需要,“shell”也可以是“全局”或“本地”。
jenv 在工作时很好。不过建议不要这样做,因为它不会“真正”更改使用的默认 java 版本,通过运行命令“/usr/libexec/java_home -V”很明显,只有 JAVA_HOME。这会导致某些应用程序出现奇怪的问题,例如 Eclipse。
除了我偏执的部分建议不要卷曲任何东西来抨击。即使您认为该网站是值得信赖的,也没有人可以向您保证它是不可破解的。使用你的操作系统的包管理器。
该信息已过时。检查 official documentationmore detailed instructions
C
Community

这有点棘手,但请尝试按照 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


如何设置 JAVA_HOME 变量?我有一个特定的地方吗?
我在哪里导出 JAVA_HOME?那将被保存在哪里?
我已经更新了答案。你知道你安装的SDK版本吗?文件夹名称采用 SDK 版本号,因此上面的命令可能会有所变化。
我安装了最新的,我认为是51。
变量 JAVA_HOME 将在当前终端会话中导出。如果需要,您可以将其添加到我们的 .bashrc。我会将命令调整为最新版本。
u
user2708060

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

h
hermeslm

更新...

在 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"

有关详细信息,您可以查看此帖子:How to Use Brew to Install Java on Mac


介意做一个小编辑@hermeslm?看到这个:brew tap caskroom/cask Error: caskroom/cask was moved. Tap homebrew/cask instead.
很好@hafichuk,这在这个答案的那一刻起作用。我会编辑的,谢谢。
@hermeslm brew cask install 不适用于较新的版本,请添加以下更新:brew install cask packageName。参考文献L:stackoverflow.com/questions/30413621/…
我必须运行 brew install adoptopenjdk/openjdk/adoptopenjdk8 而不是 brew cask install adoptopenjdk8
d
dustinevan

tl;博士

添加行:

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

到文件

~/.bash_profile

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

然后source ~/.bash_profile


u
user77115

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

我正在使用类似的工具:sdkman.io/usage - 恕我直言,比手动别名等更好的方法
A
Abbin Varghese

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

echo $JAVA_HOME 为您提供当前的 java home。例如:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/ cd /Library/Java/JavaVirtualMachines/ 将带您到您通常安装 jdks 的文件夹(您的机器可能会有所不同)ls显示可用的文件夹(通常会有版本号,例如:jdk1.8.0_191.jdk openjdk-11.0.2.jdk) export JAVA_HOME='/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents /Home' 将更改 java home..


J
Joaquín L. Robles

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


最简单的方法(:谢谢
此解决方案允许在安装了 JDK 15 和 16 的情况下运行 VisualVM(当前不支持 JDK 16)。
M
Manuel Jordan

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

/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 - 使用第一个 Tab 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)

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


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


A
Amin Agha

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

//Open bash profile
open ~/.bash_profile

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

// run bash profile
source ~/.bash_profile

谢谢!需要注意的是,您必须包含` 标记。显然,用您可能需要的任何版本替换 1.8。在我的情况下 13.0.2
x
xsilen T

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

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

f
feistyfawn

将以下代码行添加到您的 .zshrc(或 bash_profile)中:

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

保存到会话:

$源.zshrc

运行命令(例如 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".

在我将脚本添加到 .zshrc 之后,然后像 j 11 一样运行它,终端输出:f:export: not valid in this context: -v
A
Antonio

来自 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`

M
Marcello de Sales

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)

V
Vishrant

在您的 ~/.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


如果我使用 ~/.zshrc(或 zsh 终端),这是否意味着我应该输入 ~/.zprofile
更新了答案@elliotching
请注意 - 如果您没有安装标记的版本,那么 java_home 将返回 default 版本(除非您包含 -F 标志)。所以这可能是一种误导!
不知道我是否理解这个问题,你能举个例子吗?如果有人在 .bash_profile 中设置这些变量,那么他们就会知道正在进行的更改,它不会自动发生。
R
Rohit Kumar

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

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

那么你必须使用这个。

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

它肯定会奏效。


C
Community

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

emacs bash_profile zshrc 文件

设置环境变量的步骤:-

从 JAVA 下载 jdk 通过双击现在在您的文件中设置环境变量来安装它 a.对于 emacs.profile,您可以使用此链接或查看下面的屏幕截图

https://i.stack.imgur.com/rfOs1.png

湾。对于 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 版本..


R
RoundPi

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

M
MonstroDev

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

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

j
joensson

以前我在 .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


A
Alex

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


E
Eric

这是我在我的 Linux(Ubuntu / Mint 伴侣)上的做法,我猜 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 版本定义变量。 eg _E_JAVA_HOME_11='/mnt/star/program/java/jdk-11' _E_JAVA_HOME_8='/mnt/star/program/java/jdk-8' # 默认版本目录,_E_JAVA_HOME_D=$_E_JAVA_HOME_8

在 ~/.bashrc 中,定义切换 Java 版本的命令。 eg ## 切换java版本,别名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" # 默认java版本,别名jvd="rm $ JAVA_HOME; ln -s $_E_JAVA_HOME_D $JAVA_HOME" 别名 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时,我保留了次要版本,然后与主要版本建立了软链接,但没有次要版本。 eg // 这是实际的目录,jdk1.8.0_191 // 这是到 jdk1.8.0_191 jdk-8 的软链接 // 这是到 jdk-8 或 jdk-11 java 的软链接

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


f
friederbluemle

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


Y
Yossarian42

将此函数添加到 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
}

R
Rajiv Singh

检查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 版本