簡體   English   中英

/usr/libexec/java_home -v<version> 找到正確的 JDK 版本,但僅在第一次更新</version>

[英]/usr/libexec/java_home -v <version> finds the right JDK version but updates it only the first time

我剛買了一台帶有 M1 處理器的 mac mini,我覺得這種行為很奇怪。 基本上,在運行/usr/libexec/java_home -v ##時,我可以看到只有第一次找到並替換了 JDK 路徑。 如果我使用-V標志再次運行它,我會發現它找到了正確的 JDK 路徑,但它永遠不會替換舊路徑,實際上使整個事情變得陳舊。

知道為什么嗎? 這是從我的終端中獲取的示例。

lda@Lucios-Mac-mini ~ % /usr/libexec/java_home -V   
Matching Java Virtual Machines (3):
    15 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 15" /Library/Java/JavaVirtualMachines/adoptopenjdk-15.jdk/Contents/Home
    13.0.5.1 (arm64) "Azul Systems, Inc." - "Zulu 13.35.1017" /Library/Java/JavaVirtualMachines/zulu-13.jdk/Contents/Home
    11.0.9.1 (arm64) "Azul Systems, Inc." - "Zulu 11.43.1015" /Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/adoptopenjdk-15.jdk/Contents/Home

lda@Lucios-Mac-mini ~ % java --version              
openjdk 15 2020-09-15
OpenJDK Runtime Environment AdoptOpenJDK (build 15+36)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 15+36, mixed mode, sharing)

lda@Lucios-Mac-mini ~ % export JAVA_HOME=$(/usr/libexec/java_home -v11) 

lda@Lucios-Mac-mini ~ % java --version                                 
openjdk 11.0.9.1 2020-11-04 LTS
OpenJDK Runtime Environment Zulu11.43+1015-CA (build 11.0.9.1+1-LTS)
OpenJDK 64-Bit Server VM Zulu11.43+1015-CA (build 11.0.9.1+1-LTS, mixed mode)

lda@Lucios-Mac-mini ~ % export JAVA_HOME=$(/usr/libexec/java_home -v15)

lda@Lucios-Mac-mini ~ % java --version                                 
openjdk 11.0.9.1 2020-11-04 LTS
OpenJDK Runtime Environment Zulu11.43+1015-CA (build 11.0.9.1+1-LTS)
OpenJDK 64-Bit Server VM Zulu11.43+1015-CA (build 11.0.9.1+1-LTS, mixed mode)

lda@Lucios-Mac-mini ~ % export JAVA_HOME=$(/usr/libexec/java_home -v13)

lda@Lucios-Mac-mini ~ % java --version                                 
openjdk 11.0.9.1 2020-11-04 LTS
OpenJDK Runtime Environment Zulu11.43+1015-CA (build 11.0.9.1+1-LTS)
OpenJDK 64-Bit Server VM Zulu11.43+1015-CA (build 11.0.9.1+1-LTS, mixed mode)

我有一個 M1 mac,對我來說,錯誤肯定是 java_home 總是返回相同的值,而不是無法重新分配 shell 變量(即 JAVA_HOME)。

我有一個 M1 mac 並且我已經安裝了 azul jvms:

$ /usr/libexec/java_home -V
    Matching Java Virtual Machines (3):
    11.0.9.1 (arm64) "Azul Systems, Inc." - "Zulu 11.43.1021" /Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home
    9.0.4.0.11 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
    1.8.0_275 (arm64) "Azul Systems, Inc." - "Zulu 8.50.0.1017" /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home

我總是得到這個zulu-11:

$ /usr/libexec/java_home -v 1.8
/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home

並且仍然獲得zulu-11:

$ /usr/libexec/java_home -v9
/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home

我想我可以通過過濾標准輸出來解決這個問題,只是使用'-V'參數調用,但是調用 go 到標准錯誤的結果。 所以這是一個適用於 select JDK 1.8 的版本(在 'awk' 之后指定版本):

$ export JAVA_HOME=`/usr/libexec/java_home -V  2>&1 >/dev/null | awk '/1.8/ {print $NF}'`

感謝這里的第一個答案: 我如何 pipe 標准錯誤,而不是標准輸出? 在這里: 打印文件中一行的最后一列

說了以上所有,go 似乎有點不穩定,當使用 zsh 時(也許我一次改變了太多東西),因為 output 略有不同,它包括當前設置。 我可以讓它工作:

JAVA_HOME=`/usr/libexec/java_home -V 2> /dev/fd/1 | awk '/^\ \ \ \ 1.8/ {print $NF}'`; java -version"

但是如果 JAVA_HOME 未設置或錯誤,所有賭注都將取消,因為 java_home 在這種情況下不會打印出列表。 可能在 java_home 修復之前,我會在 my.bash_profile/.zshrc 中使用簡單的別名:

alias j8="export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home; java -version"
alias j11="export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home; java -version"

而不是:

alias j11="export JAVA_HOME=`/usr/libexec/java_home -V 2> /dev/fd/1 | awk '/^\ \ \ \ 11/ {print $NF}'`; java -version"
alias j8="export JAVA_HOME=`/usr/libexec/java_home -V 2> /dev/fd/1 | awk '/^\ \ \ \ 1.8/ {print $NF}'`; java -version"

這將再次起作用,當 java_home 工作時,但 TBH,我很少更改 jdk 以至於它成為一個問題,當我這樣做時......因為 azul go 具有較短的目錄名稱,不包括補丁版本號...我希望它會好起來的。 當我到達時,我會穿過那座橋。

暫無
暫無

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

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