簡體   English   中英

在 macOS BigSur 中更改 java 版本

[英]change java version in macOS BigSur

我無法在 macOS BigSur 中更改 java 版本。 我有以下版本:

當我執行這個命令時

/usr/libexec/java_home -V

我有以下版本:

Matching Java Virtual Machines (3):
    11.0.8 (x86_64) "Oracle Corporation" - "Java SE 11.0.8" /Library/Java/JavaVirtualMachines/jdk-11.0.8.jdk/Contents/Home
    1.8.261.12 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
    1.8.0_261 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-11.0.8.jdk/Contents/Home

我想切換到默認的 java 1.8,所以我執行這個命令:

export JAVA_HOME=/usr/libexec/java_home -v 1.8.0_261

然后當我檢查 java 版本時:

java -version

我還有舊的(更高的)

java version "11.0.8" 2020-07-14 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.8+10-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.8+10-LTS, mixed mode)

為什么它不起作用?

請使用以下命令:-

export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_261`

您必須取消設置 JAVA_HOME 並設置 JAVA_VERSION 然后它才能工作。

~% JAVA_VERSION=12 java -version
openjdk version "14.0.2" 2020-07-14
~% export JAVA_VERSION=12
~% java -version
openjdk version "14.0.2" 2020-07-14
~% unset JAVA_HOME
~% java -version
java version "12.0.1" 2019-04-16
~% JAVA_VERSION=13 java -version
java version "13-ea" 2019-09-17

或者如果你需要設置 JAVA_HOME 你需要在調用/usr/libexec/java_home之前取消設置

function jav {
unset JAVA_HOME
export JAVA_HOME=`/usr/libexec/java_home -v $@`
}
~% jav 12
~% java -version
java version "12.0.1" 2019-04-16
~% jav 13
~% java -version
java version "13-ea" 2019-09-17

現在/usr/bin/java有了新的二進制文件,它的優先級高於$JAVA_HOME/bin/java

將 macOS 升級到 Big Sur 后,我今天一直對同樣的問題感到困惑。

我的 Mac 上有兩個 JDK,Oracle JDK 11 和 Oracle JDK 8。

然后/usr/libexec/java_home總是返回/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home並忽略其他參數,如-v 1.8

經過一些測試,我發現只有當您的 Mac 具有 Oracle JDK 1.8.X 版本時才會發生這種情況。

所以我刪除了Oracle JDK 1.8.x, /usr/libexec/java_home可以返回正確的JDK 11 路徑。

然后我嘗試了AdoptOpenJDK 8, /usr/libexec/java_home可以正確返回其路徑,但是忽略-v 11 arg,無法獲取JDK 11 的路徑。

java_home命令中似乎存在一些錯誤,如果您的 Mac 上只有一個 JDK - 除了 Oracle JDK 8 - 它應該可以正常工作。 如果您有多個 JDK,它可能只返回最后安裝的 JDK 路徑。

因此,要么只保留一個 JDK 安裝,要么使用絕對路徑設置$JAVA_HOME env 就可以了。

我在我的 .zshenv 上添加了以下內容,並且工作正常。 謝謝木南。

## Java home
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)

## Java alias
alias java8='export JAVA_VERSION=1.8'
alias java11='export JAVA_VERSION=11'

要從控制台更改 java 版本,請使用:java8 或 java11

在我看來,命令"/usr/libexec/java_home -v"不起作用。 我解決了直接導出文件 .bash_profile 中的 java 路徑:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home

然后執行命令:

source .bash_profile.

在此之后使用命令:echo $JAVA_HOME 我已經看到 JVM 路徑設置正確。

更新:Mac OS 13.1

當你安裝一個openjdk版本時(除了系統/默認安裝的),例如:

brew install openjdk@11

(至少就我而言)默認情況下它沒有鏈接到正確的位置。 您需要按照此處概述的方式對其進行符號鏈接

sudo ln -sfn /opt/homebrew/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk

這樣當您運行/usr/libexec/java_home -V時,您將看到所有已安裝的版本

Matching Java Virtual Machines (2):
    19.0.1 (arm64) "Homebrew" - "OpenJDK 19.0.1" /opt/homebrew/Cellar/openjdk/19.0.1/libexec/openjdk.jdk/Contents/Home
    11.0.18 (arm64) "Homebrew" - "OpenJDK 11.0.18" /opt/homebrew/Cellar/openjdk@11/11.0.18/libexec/openjdk.jdk/Contents/Home

選擇正確的就像設置環境變量$JAVA_HOME一樣簡單

export JAVA_HOME=`/usr/libexec/java_home -v 11`  # to set to java 11, for eg

運行java --version確認:

openjdk 11.0.18 2023-01-17
OpenJDK Runtime Environment Homebrew (build 11.0.18+0)
OpenJDK 64-Bit Server VM Homebrew (build 11.0.18+0, mixed mode)

我按照以下步驟解決了在 macOS BigSur 中設置我需要的 java 版本的問題。 :

當我執行這個命令時

/usr/libexec/java_home -V

我有以下版本:

Matching Java Virtual Machines (3):
17 (x86_64) "Homebrew" - "OpenJDK 17" /usr/local/Cellar/openjdk/17/libexec/openjdk.jdk/Contents/Home
11.0.17.0-m1 (x86_64) "IBM Corporation" - "IBM Semeru Runtime Open Edition 11" /Users/airasia/Library/Java/JavaVirtualMachines/semeru-11.0.17/Contents/Home
1.8.0_292 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home

/usr/local/Cellar/openjdk/17/libexec/openjdk.jdk/Contents/Home

然后,我想切換到默認的 java 1.8,所以我執行了這個命令:

echo 'export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)' >> ~/.profile

然后當我檢查 java 版本時:

java --version

我還在得到舊的(更高的)

openjdk 17 2021-09-14
OpenJDK Runtime Environment Homebrew (build 17+0)
OpenJDK 64-Bit Server VM Homebrew (build 17+0, mixed mode, sharing)

~/.profile文件看起來像,

vim ~/.profile
export JAVA_HOME=/usr/local/opt/openjdk/bin
export PATH=$JAVA_HOME/bin:$PATH

然后我檢查了

set | grep JAVA         
JAVA_HOME=JAVA_HOME=/usr/local/Cellar/openjdk/17/libexec/openjdk.jdk/Contents/Home

然后我在~/.profile文件中添加了新的JAVA_HOME

vim ~/.profile
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
export PATH=$JAVA_HOME/bin:$PATH

並執行它,

source ~/.profile

現在 java 指向1.8.0_292

java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.292-b10, mixed mode)

要再次回openjdk 17 ,我只需要刪除一行,

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

並添加,

export JAVA_HOME=/usr/local/opt/openjdk/bin

並執行它,

source ~/.profile

我也是,太煩人了,給我添麻煩了。 他似乎是通過設置'$JAVA_VERSION'來解決的。 請使用以下命令:-

export JAVA_VERSION=11

暫無
暫無

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

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