簡體   English   中英

為什么命令 /usr/libexec/java_home 不起作用?

[英]Why command /usr/libexec/java_home doesn't work?

操作系統:MacOS 大蘇爾 11.0.1

我使用/usr/libexec/java_home命令更改 java 版本。

有些程序運行需要特殊版本。 所以我安裝了多個版本的 java。

 /usr/libexec/java_home -V            
Matching Java Virtual Machines (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

我配置了.bash_profile

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。

這對我來說是個問題。

感謝@MarioStefanutti 共享鏈接。 升級到 macOS Big Sur v11.0.1 后出現錯誤的 JAVA_HOME

由於已設置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)
...

由於您在更新 MacOS 之前說它有效,請驗證您的 shell 是否為 bash(新的默認值為 zsh)。 嘗試類似echo $ZSH_NAME :如果它是空白的,那么您正在運行 zsh 而不是 bash。

嘗試類似env JAVA_HOME=JAVA_13_HOME mvn...來驗證您的配置。

在設置JAVA_HOME之前使用/usr/libexec/java_home -v {version} ,否則它將始終返回JAVA_HOME中的設置

在 shell 初始化中,命令您的語句在設置JAVA_HOME之前通過/usr/libexec/java_home -v {version}捕獲所需的所有信息

在其他情況下,或者如果您想絕對確定,您可以在使用/usr/libexec/java_home -v {version}之前先unset JAVA_HOME

例如,當使用像 direvn 這樣的東西時, .envrc文件看起來像

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM