为什么命令 /usr/libexec/java_home 不起作用?
为什么命令 /usr/libexec/java_home 不起作用?
操作系统:MacOS Big Sur 11.0.1\n我使用/usr/libexec/java_home
命令来更改Java版本。\n有些程序需要特定的版本,所以我安装了多个Java版本。\n
/usr/libexec/java_home -V 匹配的Java虚拟机(7): 14.0.1(x86_64)"Oracle Corporation" - "Java SE 14.0.1" /Library/Java/JavaVirtualMachines/jdk-14.0.1.jdk/Contents/Home 13(x86_64)"Oracle Corporation" - "Java SE 13" /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home 10.0.2.0.13(x86_64)"Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home 10.0.2(x86_64)"Oracle Corporation" - "Java SE 10.0.2" /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home 1.8.0_192(x86_64)"Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home 1.8.0_111(x86_64)"Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home 1.7.0_80(x86_64)"Oracle Corporation" - "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home /Library/Java/JavaVirtualMachines/jdk-14.0.1.jdk/Contents/Home
\n我配置了.bash_profile
:\n
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" # 将RVM加载到shell会话中 *作为函数* source ~/.bashrc
\n至少在MacOS更新之前是有效的。\n但是现在:\n\n它总是使用jdk14。\n这对我来说是个问题。
问题出现的原因是更新了MacOS后,shell由bash更改为zsh。解决方法是验证shell是否为bash,并使用echo $ZSH_NAME
命令来检查。如果结果为空,则表示正在运行zsh而不是bash。另外,可以尝试使用env JAVA_HOME=JAVA_13_HOME mvn ...
命令来验证配置。
还有一位用户表示遇到了相同的问题,只有版本1.8被返回。但是,如果使用sudo命令运行该命令,则可以正常工作。
问题的解答可以在stackoverflow.com/questions/64917779/…找到。感谢提供解答的用户。在设置了JAVA_HOME
变量之后,/usr/libexec/java_home -v {pattern}
命令将变得无用。
/usr/libexec/java_home命令无法正常工作的原因是在设置JAVA_HOME之前,没有使用/usr/libexec/java_home -v {version}命令来获取所需的信息。解决方法是在shell初始化时,通过/usr/libexec/java_home -v {version}命令来获取所需的信息,然后再设置JAVA_HOME。如果需要确保绝对正确,可以在使用/usr/libexec/java_home -v {version}命令之前先使用unset JAVA_HOME命令将JAVA_HOME变量清空。例如,在使用类似direnv的工具时,.envrc文件的内容可以如下所示:
unset JAVA_HOME
export JAVA_HOME=$(/usr/libexec/java_home -v 11)
PATH_add $JAVA_HOME/bin
通过这种方式,可以先清空JAVA_HOME变量,然后再使用/usr/libexec/java_home -v {version}命令来设置JAVA_HOME,并将JAVA_HOME/bin添加到PATH中。这样就可以确保JAVA_HOME变量被正确地设置为所需的版本。此外,还有用户提到他们有一些用于设置JAVA_HOME到不同版本的别名,而上述解决方法中提到了需要先将JAVA_HOME变量清空,这个解决方法对他们很有帮助。
/usr/libexec/java_home命令无法正常工作的原因是因为在macOS Big Sur v11.0.1升级后,JAVA_HOME变量已经被设置过了。因此,执行/usr/libexec/java_home -v {pattern}命令将是无用的。
解决方法是在设置JAVA_HOME之前执行/usr/libexec/java_home -v {pattern}命令。
具体的解决方法如下所示:
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) # finally set JAVA_HOME export JAVA_HOME=$(/usr/libexec/java_home) ...
以上就是为什么/usr/libexec/java_home命令无法工作的原因以及解决方法。