无法在 macOS Catalina 上动态设置 JAVA_HOME
Can't set JAVA_HOME dynamically on macOS Catalina
tl,博士;
一旦 JAVA_HOME
已经设置,执行 export JAVA_HOME=$(/usr/libexec/java_home -v 14)
将不会改变活动 java
步骤
- 首先设置
JAVA_HOME
(例如export JAVA_HOME=$(/usr/libexec/java_home -v 11)
):
$ echo ${JAVA_HOME}
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
$ java -version
openjdk version "11.0.8" 2020-07-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.8+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.8+10, mixed mode)
- 尝试将其设置为不同的版本(例如
export JAVA_HOME=$(/usr/libexec/java_home -v 14)
)- 它仍然使用之前设置的 java
(即使 JAVA_HOME
已更新):
$ echo ${JAVA_HOME}
/Library/Java/JavaVirtualMachines/adoptopenjdk-14.jdk/Contents/Home
$ java -version
openjdk version "11.0.8" 2020-07-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.8+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.8+10, mixed mode)
我不确定为什么它现在不工作了 - 前一段时间工作得很好(我想是 2-3 个月前)
有一个看似相似的主题(),但归结起来却是不同的shell。在我的例子中,我使用相同的 shell - bash from brew:
$ bash -version
GNU bash, version 5.0.18(1)-release (x86_64-apple-darwin19.5.0)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
似乎更新 JAVA_HOME
没有反映在 PATH
变量中。
因此,请同时更新 PATH 变量并将更新后的 JAVA_HOME
作为导出 PATH
命令中的第一个元素
好的,我终于设法解决了这个问题。正如其他人指出的那样,一切都与 PATH
变量有关。我确实有 JAVA_HOME/bin
在那里......这导致了问题。今天在更新期间我注意到 openjdk
brew formula 有这样的评论:
keg_only "it shadows the macOS `java` wrapper"
然后事情立即“点击”。经过一番搜索后,我发现 证实了这个问题。通过在我的 .profile
文件的 PATH
中包含 JAVA_HOME
,我破坏了它的 java
包装器的本机 macOS 功能,它根据当前设置选择活动的 java
版本JAVA_HOME
.
这是我的示例会话(从打开 shell 并在 .profile
文件中包含 export JAVA_HOME=$(/usr/libexec/java_home -v 11)
)——我在配置文件中有默认设置,然后我明确设置 JAVA_HOME
并即时切换 java
版本:
$ java -version
openjdk version "11.0.8" 2020-07-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.8+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.8+10, mixed mode)
$ export JAVA_HOME=$(/usr/libexec/java_home -v 14)
$ java -version
openjdk version "14.0.2" 2020-07-14
OpenJDK Runtime Environment AdoptOpenJDK (build 14.0.2+12)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 14.0.2+12, mixed mode, sharing)
tl,博士;
一旦 JAVA_HOME
已经设置,执行 export JAVA_HOME=$(/usr/libexec/java_home -v 14)
将不会改变活动 java
步骤
- 首先设置
JAVA_HOME
(例如export JAVA_HOME=$(/usr/libexec/java_home -v 11)
):
$ echo ${JAVA_HOME}
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
$ java -version
openjdk version "11.0.8" 2020-07-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.8+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.8+10, mixed mode)
- 尝试将其设置为不同的版本(例如
export JAVA_HOME=$(/usr/libexec/java_home -v 14)
)- 它仍然使用之前设置的java
(即使JAVA_HOME
已更新):
$ echo ${JAVA_HOME}
/Library/Java/JavaVirtualMachines/adoptopenjdk-14.jdk/Contents/Home
$ java -version
openjdk version "11.0.8" 2020-07-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.8+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.8+10, mixed mode)
我不确定为什么它现在不工作了 - 前一段时间工作得很好(我想是 2-3 个月前)
有一个看似相似的主题(
$ bash -version
GNU bash, version 5.0.18(1)-release (x86_64-apple-darwin19.5.0)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
似乎更新 JAVA_HOME
没有反映在 PATH
变量中。
因此,请同时更新 PATH 变量并将更新后的 JAVA_HOME
作为导出 PATH
命令中的第一个元素
好的,我终于设法解决了这个问题。正如其他人指出的那样,一切都与 PATH
变量有关。我确实有 JAVA_HOME/bin
在那里......这导致了问题。今天在更新期间我注意到 openjdk
brew formula 有这样的评论:
keg_only "it shadows the macOS `java` wrapper"
然后事情立即“点击”。经过一番搜索后,我发现 .profile
文件的 PATH
中包含 JAVA_HOME
,我破坏了它的 java
包装器的本机 macOS 功能,它根据当前设置选择活动的 java
版本JAVA_HOME
.
这是我的示例会话(从打开 shell 并在 .profile
文件中包含 export JAVA_HOME=$(/usr/libexec/java_home -v 11)
)——我在配置文件中有默认设置,然后我明确设置 JAVA_HOME
并即时切换 java
版本:
$ java -version
openjdk version "11.0.8" 2020-07-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.8+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.8+10, mixed mode)
$ export JAVA_HOME=$(/usr/libexec/java_home -v 14)
$ java -version
openjdk version "14.0.2" 2020-07-14
OpenJDK Runtime Environment AdoptOpenJDK (build 14.0.2+12)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 14.0.2+12, mixed mode, sharing)