为什么command/usr/libexec/java#u home不';不行?

为什么command/usr/libexec/java#u home不';不行?,java,macos,shell,java-home,Java,Macos,Shell,Java Home,操作系统:MacOS大苏尔11.0.1 我使用/usr/libexec/java\u home命令更改java版本 有些程序需要特殊版本才能运行。所以我安装了多版本的java /usr/libexec/java_home-V 匹配的Java虚拟机(7): 14.0.1(x86_64)“Oracle公司”-“Java SE 14.0.1”/Library/Java/JavaVirtualMachines/jdk-14.0.1.jdk/Contents/Home 13(x86_64)“Oracle公

操作系统:MacOS大苏尔11.0.1

我使用
/usr/libexec/java\u home
命令更改java版本

有些程序需要特殊版本才能运行。所以我安装了多版本的java

/usr/libexec/java_home-V
匹配的Java虚拟机(7):
14.0.1(x86_64)“Oracle公司”-“Java SE 14.0.1”/Library/Java/JavaVirtualMachines/jdk-14.0.1.jdk/Contents/Home
13(x86_64)“Oracle公司”-“Java SE 13”/Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home
10.0.2.0.13(x86_64)“Oracle公司”-“Java”/Library/Internet插件/JavaAppletPlugin.plugin/Contents/Home
10.0.2(x86_64)“Oracle公司”-“Java SE 10.0.2”/Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
1.8.0_192(x86_64)“Oracle公司”-“Java SE 8”/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home
1.8.0_111(x86_64)“Oracle公司”-“Java SE 8”/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
1.7.0_80(x86_64)“Oracle公司”-“Java SE 7”/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-14.0.1.jdk/Contents/Home
我配置了
.bash\u配置文件

export JAVA_HOME=$(/usr/libexec/java_home)
export JAVA_7_HOME=$(/usr/libexec/java_home -v1.7)
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_10_HOME=$(/usr/libexec/java_home -v10)
export JAVA_13_HOME=$(/usr/libexec/java_home -v13)

alias jdk7="export JAVA_HOME=$JAVA_7_HOME"
alias jdk8="export JAVA_HOME=$JAVA_8_HOME"
alias jdk10="export JAVA_HOME=$JAVA_10_HOME"
alias jdk13="export JAVA_HOME=$JAVA_13_HOME"

export MAVEN_HOME=/Users/peizangpin/Program/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin

export GRADLE_HOME=/Users/peizangpin/Program/gradle-6.7
export PATH=$PATH:$GRADLE_HOME/bin
export GRADLE_USER_HOME=/Users/peizangpin/Documents/ResuorcesPackage/gradle

export PATH=/opt/local/bin:$PATH
export PATH=/opt/local/sbin:$PATH
export PATH=/usr/local/bin:$PATH
export PATH=/usr/local/mysql/bin:$PATH
export PATH=$PATH:/usr/local/opt/go/libexec/bin
export PATH=$PATH:/usr/local/go/bin
export PATH=$PATH:/usr/local/opt/rabbitmq/sbin
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

source ~/.bashrc

至少在MacOS更新之前它已经运行了

但现在:

它总是使用jdk14


这对我来说是个问题。

既然你说它在你更新MacOS之前就工作了,那么请验证你的shell是bash(新的默认值是zsh)。尝试类似于
echo$ZSH_NAME
:如果为空,则运行的是ZSH而不是bash


请尝试类似于
env JAVA_HOME=JAVA_13_HOME mvn…
的方法来验证您的配置。

感谢@MarioStefanutti共享链接。

由于
JAVA\u HOME
变量已设置。
/usr/libexec/java_home-v{pattern}
将毫无用处

因此,解决方案是在设置
java\u home
之前执行
/usr/libexec/java\u home-v{pattern}

export JAVA_7_HOME=$(/usr/libexec/JAVA_HOME-v1.7)
导出JAVA_8_HOME=$(/usr/libexec/JAVA_HOME-v1.8)
导出JAVA_10_HOME=$(/usr/libexec/JAVA_HOME-v10)
导出JAVA_13_HOME=$(/usr/libexec/JAVA_HOME-v13)
#最后将JAVA_设置为主页
导出JAVA_HOME=$(/usr/libexec/JAVA_HOME)
...

在设置
java\u home
之前,请使用
/usr/libexec/java\u home-v{version}
,否则它将始终返回
java\u home
中设置的值

在shell初始化中,在设置
java\u home

在其他情况下,或者如果您想绝对确定,您可以在使用
/usr/libexec/JAVA_HOME-v{version}
之前先
取消设置JAVA_HOME

例如,当使用类似direvn的内容时,
.envrc
文件如下所示

unset JAVA_HOME
export JAVA_HOME=$(/usr/libexec/java_home -v 11)
PATH_add $JAVA_HOME/bin

我也有同样的行为。不知道什么时候开始,但对我来说是一样的@葬礼用品。在我的情况下,只返回版本1.8。如果我用sudo运行这个命令,效果会很好,我在这里找到了答案:@MarioStefanutti谢谢你。这对我有帮助。设置
java\u home
变量后,
/usr/libexec/java\u home-v{pattern}
将无效。