Can';t在macOS Catalina上动态设置JAVA_主页
tl,dr,; 执行Can';t在macOS Catalina上动态设置JAVA_主页,java,bash,macos,java-home,Java,Bash,Macos,Java Home,tl,dr,; 执行export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v 14)一旦设置了JAVA_HOME,将不会更改活动的JAVA 台阶 首先设置JAVA_HOME(例如使用export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v 11)): 尝试将其设置为不同的版本(例如export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v14))-它仍然使用以前设置的JAVA(即使JAVA_HOME已更新)
export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v 14)
一旦设置了JAVA_HOME
,将不会更改活动的JAVA
台阶
JAVA_HOME
(例如使用export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v 11)
):export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v14)
)-它仍然使用以前设置的JAVA
(即使JAVA_HOME
已更新):$ 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.
$bash-版本
GNU bash,版本5.0.18(1)-发布版(x86_64-apple-darwin19.5.0)
版权所有(C)2019免费软件基金会。
许可证GPLv3+:GNU GPL版本3或更高版本
这是自由软件;您可以自由更改和重新分发它。
在法律允许的范围内,不存在任何担保。
似乎更新JAVA\u HOME
没有反映在路径
变量中
因此,请同时更新PATH变量并保持更新后的JAVA_HOME
,因为导出PATH
命令中的第一个元素似乎更新JAVA_HOME
没有反映在PATH
变量中
因此,请同时更新PATH变量,并将更新后的JAVA_HOME
作为导出PATH
命令的第一个元素,好的,我终于解决了这个问题。正如其他人指出的,一切都与PATH
变量有关。我确实有JAVA_HOME/bin
在那里……这导致了问题。今天在更新过程中,我注意到有以下评论:
keg_only "it shadows the macOS `java` wrapper"
事情马上就“咔哒”一声发生了。在搜索了一点之后,我找到了确认问题的答案。通过在我的.profile
文件的路径中包含JAVA\u HOME
,我破坏了它的JAVA
包装器的本机macOS功能,该包装器基于当前设置的JAVA\u HOME
选择活动的JAVA
版本
这是我的示例会话(从打开shell并在.profile
文件中使用export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v 11)
)——我在概要文件中使用默认值,然后显式设置JAVA_HOME
,并动态切换JAVA
版本:
$java-version
openjdk版本“11.0.8”2020-07-14
OpenJDK运行时环境采用OpenJDK(构建11.0.8+10)
OpenJDK 64位服务器VM采用OpenJDK(构建11.0.8+10,混合模式)
$export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v14)
$java-版本
openjdk版本“14.0.2”2020-07-14
OpenJDK运行时环境采用OpenJDK(构建14.0.2+12)
OpenJDK 64位服务器VM采用OpenJDK(构建14.0.2+12,混合模式,共享)
好的,我终于解决了这个问题。正如其他人指出的,一切都与PATH
变量有关。我确实有JAVA_HOME/bin
在那里……这导致了问题。今天在更新过程中,我注意到有以下评论:
keg_only "it shadows the macOS `java` wrapper"
事情马上就“咔哒”一声发生了。在搜索了一点之后,我找到了确认问题的答案。通过在我的.profile
文件的路径中包含JAVA\u HOME
,我破坏了它的JAVA
包装器的本机macOS功能,该包装器基于当前设置的JAVA\u HOME
选择活动的JAVA
版本
这是我的示例会话(从打开shell并在.profile
文件中使用export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v 11)
)——我在概要文件中使用默认值,然后显式设置JAVA_HOME
,并动态切换JAVA
版本:
$java-version
openjdk版本“11.0.8”2020-07-14
OpenJDK运行时环境采用OpenJDK(构建11.0.8+10)
OpenJDK 64位服务器VM采用OpenJDK(构建11.0.8+10,混合模式)
$export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v14)
$java-版本
openjdk版本“14.0.2”2020-07-14
OpenJDK运行时环境采用OpenJDK(构建14.0.2+12)
OpenJDK 64位服务器VM采用OpenJDK(构建14.0.2+12,混合模式,共享)
我对macos了解不多,但是否有一个与窗口的路径
env变量等价的变量来查找java
命令?有,但以前它是自动更新的,以反映更新后的java\u HOME
(如果您想在当前shell中快速切换活动java
版本,这非常方便)我对macos了解不多,但是否有一个与窗口的PATH
env变量等价的变量来查找java
命令?有,但以前它是自动更新的,以反映更新后的java\u HOME
(如果您想在当前shell中快速切换活动的java
版本,这非常方便)我的profile
文件中有export PATH=$java\u HOME/bin:$PATH
。似乎当前为每个shell实例设置了路径。在它变得更“动态”之前仅更改JAVA\u HOME
也反映在PATH
中。因此,如果在shell中执行export PATH=$JAVA\u HOME/bin:$PATH
,然后尝试JAVA-version
,它是否能像预期的那样工作,但在这种情况下,我会在PATH
中得到两个版本的路径,我认为如果在.profile
file它应该可以工作export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v14))
export PATH=$JAVA_HOME/bin:$PATH
我有它们!设置JAVA本身也很好。我试图实现的是能够在以后动态切换JAVA版本。也就是说,我打开新的shell,拥有java11(按照配置文件)但是我想切换到java14。以前,将JAVA_切换到主页就足够了
keg_only "it shadows the macOS `java` wrapper"