簡體   English   中英

升級到 macOS Big Sur v11.0.1 后 JAVA_HOME 錯誤

[英]Wrong JAVA_HOME after upgrade to macOS Big Sur v11.0.1

在我在 macOS 上的設置中,我正在使用幾個 JDK,通過/usr/libexec/java_home工具在它們之間切換,類似於這個 SO answer中描述的方法

升級到 macOS Big Sur v11.0.1 后,我的 JAVA_HOME 設置停止工作,始終報告相同的 java 版本:

% /usr/libexec/java_home -V
Matching Java Virtual Machines (5):
    11.0.8 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 11" /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
    1.8.162.12 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
    1.8.0_162 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
    1.8.0_45 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
    1.7.0_45 (x86_64) "Oracle Corporation" - "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home

% /usr/libexec/java_home -v 1.8.162.12
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home

% /usr/libexec/java_home -v 1.7.0_45
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home

似乎在 macOS Big Sur v11.0.1 中/usr/libexec/java_home -v ...命令的行為發生了變化:它對先前設置的JAVA_HOME環境變量值敏感。

確切的行為尚不清楚,我找不到任何關於此的文檔,但在我的實驗中,它報告了JAVA_HOME已經設置的版本,無論-v開關如何:

% JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home /usr/libexec/java_home -v 1.8.0_162
/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

此外,我注意到如果JAVA_HOME被設置,它什么都不報告,但沒有指向有效的java home(也適用於-V ):

% JAVA_HOME=dummy /usr/libexec/java_home -v 1.7.0_45
% JAVA_HOME=dummy /usr/libexec/java_home -V
%

解決方案是確保在執行/usr/libexec/java_home之前設置JAVA_HOME

% unset JAVA_HOME ; /usr/libexec/java_home -v 1.8.0_162
/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home

我從 2021 年 2 月 18 日開始使用 Big Sur 11.2.1。 我對 JAVA_HOME 路徑配置有同樣的問題。 在閱讀了大量信息后,我解決了下一個問題:

安裝 JDK 8: https ://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html Java SE 開發工具包 8u281

像往常一樣在 MacOS Big Sur 上安裝它。

檢查JDK版本:

java -version
java version "1.8.0_281"
Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)

檢查您的機器上已經安裝了哪些版本的 JDK:

/usr/libexec/java_home -V 
Matching Java Virtual Machines (2):
    1.8.281.09 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
    1.8.0_281 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

只獲取您需要的一項:

/usr/libexec/java_home -v 1.8.0_281
/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home

在 Catalina 和 Big Sur - 有 Z-shell ,要添加 JAVA_HOME 等環境變量,有兩個文件:~/.zshenv 和 ~/.zshrc,我無法讓它與第一個一起工作。 它對我來說是這樣的:

nano ~/.zshrc

將此行添加到該文件中:

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

按 Ctrl+X 並保存更改。

然后運行命令將更改應用到當前終端:

source ~/.zshrc

之后,您可以檢查一切是否與命令一起工作:

echo $JAVA_HOME
it will print you: /Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home

重新啟動將使用 JAVA_HOME 變量的終端和程序。 對我來說是 Android Studio。 現在一切正常。 我是 Mac OS 的新手,我花了 4 個小時來解決這個問題。 使用 Windows 只需一分鍾即可完成:)

正如我嘗試的那樣。 我只是刪除/Library/Internet Plug-Ins/JavaAppletPlugin.plugin並重新登錄。 然后一切正常。

對我來說, https://developer.apple.com/forums/thread/666681在解決方案上花了很多時間后工作了。

我只是調用以下命令

sudo rm -fr /Library/Internet\\ Plug-Ins/JavaAppletPlugin.plugin

sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefpane

安裝 Big Sur 后出現此問題。

首先,我開始從系統中卸載所有 JDK:

sudo rm -rf /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin  
sudo rm -rf /Library/PreferencePanes/JavaControlPanel.prefPane  
sudo rm -rf /Library/Application\ Support/Oracle/Java/ 
sudo rm -rf /Library/Java/JavaVirtualMachines 

然后,我安裝了我將要使用的 JDK:

brew tap AdoptOpenJDK/openjdk
brew install --cask adoptopenjdk<version>

對我來說,它完全壞了。 取消設置 JAVA_HOME,/usr/libexec/java_home 給出:

/庫/互聯網插件/JavaAppletPlugin.plugin/Contents/Home

$> /usr/libexec/java_home -v "1.8.0" 似乎可以訪問確切的 jdk(如果存在)。 如果已安裝,則忽略“插件”。 這些報價是在互聯網上的隨機位置推薦的。 它們也顯示在手冊頁中。

macOS 中的/usr/libexec/java_home工具將為您提供安裝的最新 Java 版本的位置。 從終端調用它以獲得類似於以下內容的響應:

/Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home

導航到根目錄並打開.zprofile文件。

cd ~
open .zprofile

如果未找到該文件,請使用echo > .zprofile命令創建一個。

使用open .zprofile打開文件。 這應該在文本編輯器中打開它。

/usr/libexec/java_home工具的響應添加到文件中,如下所示:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home

我的解決方案是創建指向您的 JDK 文件的鏈接。 顯然,Teradata 工作室正在執行錯誤的路徑 sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/server/libjvm.dylib /Library/Java/JavaVirtualMachines/jdk1.8.0 _202.jdk/Contents/Home/lib/libserver.dylib

同意@Konstantin 在 Big Sur 升級后,我遇到了同樣的問題。

解決此問題需要遵循的步驟是:

  1. 取消設置 JAVA_HOME
  2. 檢查庫中的 java_home 指向的內容:/usr/libexec/java_home -v

匹配Java虛擬機(二):

1.8.221.11 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

1.8.0_221 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home
  1. 因為兩個版本都是1.8.221開頭的,所以默認選第一個,查看版本

/庫/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home

  1. export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home'
  2. echo $JAVA_HOME

/庫/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home

暫無
暫無

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

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