(Mac OS) JAVA 版本未改变。

10

我在我的Macbook上有两个JAVA版本。我希望将版本从14更改为11。我在互联网上找到了2个解决方案,但都无法工作。

我的java -version结果是

openjdk version "14.0.1" 2020-04-14
OpenJDK Runtime Environment (build 14.0.1+14)
OpenJDK 64-Bit Server VM (build 14.0.1+14, mixed mode, sharing)

第一种解决方案 (如何在 OS X 上设置或更改默认的 Java (JDK) 版本), 我运行/usr/libexec/java_home -V,然后得到以下结果,

Matching Java Virtual Machines (2):
14.0.1, x86_64: "OpenJDK 14.0.1"    /Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home
11.0.8, x86_64: "Java SE 11.0.8"    /Library/Java/JavaVirtualMachines/jdk-11.0.8.jdk/Contents/Home

然后我做了

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

在执行了 java -version 指令后,结果仍然是14.0.1。

第二种解决方案 (如何在 Mac 上永久设置 JAVA_HOME?), 我编辑了 ~/.bash_profile 文件,内容如下:

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

我执行命令

source ~/.bash_profile
echo $JAVA_HOME

它展示了结果。
/Library/Java/JavaVirtualMachines/jdk-11.0.8.jdk/Contents/Home

但是当我使用 java -version 命令检查结果时,仍然是14.0.1版本。


3
那只是JAVA_HOME变量。你需要将$JAVA_HOME/bin添加到你的$PATH中。请检查你的$PATH变量。 - Ghokun
试试这个,我相信其他的是针对当前会话和终端的:https://dev59.com/7mEh5IYBdhLWcg3w1mbs#44169445 - cela
5个回答

10

安装 sdkman ,它会处理你必须使用的相当繁琐的命令行操作来实现这一点。问题是,JAVA_HOME只是一个环境变量,它不会改变任何东西 - 只有显式寻找它的工具(通常是maven和ant等)才会受到干扰。当您在Mac上输入java时,它会运行/usr/bin/java,这不是您甚至以root身份也无法更改的文件。然后,该java将调用真正的java,并且不会查看JAVA_HOME以完成任务:它是指向/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java的软链接,并因为它在/System中,您也无法更改它,即使以root身份。

这就是为什么这很难,并且为什么您需要一个好的工具(sdkman)来为您完成。


任何经过数小时调试后来到这里的人,只需按照他说的做,就能像魔法般运行。 - Parth Kapadia
我只是希望这个答案能够包含更多内容,而不仅仅是“使用某人的软件,因为很难解释如何解决这些问题。”如果 sdkman 可以修复它,那么我们应该在没有 sdkman 的情况下解决这个问题。 - David Rector

6

对我来说(在Mac OS Catalina上),移除JAVA_HOME周围的引号并设置路径变量(variable)有效:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

4

如果您需要在已安装JDK的情况下切换版本,可以通过别名调整bash配置文件,以重置JAVA_HOME并重新初始化PATH

export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
export JAVA_14_HOME=$(/usr/libexec/java_home -v14)

alias java11='export JAVA_HOME=$JAVA_11_HOME; export PATH=$JAVA_HOME/bin:$PATH'
alias java14='export JAVA_HOME=$JAVA_14_HOME; export PATH=$JAVA_HOME/bin:$PATH'

然后,在重新启动终端会话后,您可以来回切换:

$ java11
$ java -version

并且

$ java14
$ java -version

1
尝试使用代码 export JAVA_HOME='/usr/libexec/java_home -v 11'(不含小版本号),在Mac上输出了正确的Java版本号。

0
我在我的苹果MacBook Pro上也遇到了同样的问题,使用了M1芯片。解决方案很简单。
1:首先,您需要检查计算机中安装了哪些JDK。为此,您需要使用以下命令。
/usr/libexec/java_home -V
上述命令将给出以下版本: 20.0.1(arm64)"Oracle Corporation" - "OpenJDK 20.0.1" /Users/buddhasattaduttaroy/Library/Java/JavaVirtualMachines/openjdk-20.0.1/Contents/Home 16.0.1(x86_64)"AdoptOpenJDK" - "AdoptOpenJDK 16" /Library/Java/JavaVirtualMachines/adoptopenjdk-16.jdk/Contents/Home 11.0.20(arm64)"Oracle Corporation" - "Java SE 11.0.20" /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home 11.0.19(arm64)"Amazon.com Inc." - "Amazon Corretto 11" /Users/buddhasattaduttaroy/Library/Java/JavaVirtualMachines/corretto-11.0.19/Contents/Home 你需要从这里选择版本,然后按照以下方式应用:
export JAVA_HOME=/usr/libexec/java_home -v 1.8 **注意,你不需要指定完整的Java版本,只需选择普通版本(例如11.0.6选择11.0或1.8,根据你的需求)**
2:你需要将这些命令放入.bashrc和.zshrc文件中,并执行source命令。
我认为这样可以解决你的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接