簡體   English   中英

Windows 上的 JAVA_HOME 似乎沒有效果

[英]JAVA_HOME on Windows seems to have no effect

我的系統上有三個不同的 JDK,所以我可以在項目之間適當地切換。 在我的 IDE 中導入適當的 JDK 沒有問題,但命令行是。 看,盡管我的用戶和系統的JAVA_HOME都指向jre1.8.0_261

我的系統變量

java --version似乎仍然認為我的默認是亞馬遜的 Corretto JDK,我只需要一個特定的項目:

C:\Users\jasonfil>java --version
openjdk 11.0.8 2020-07-14 LTS
OpenJDK Runtime Environment Corretto-11.0.8.10.1 (build 11.0.8+10-LTS)

Powershell 也是如此。 我也以管理員身份嘗試過cmdPowershell。 同樣的問題。

奇怪的是,當我從cmd查詢環境變量時,我得到了預期的 JDK:

C:\Users\jasonfil>echo %JAVA_HOME%
C:\Program Files (x86)\Java\jre1.8.0_261

在 Powershell 上, echo僅按字面意思輸出字符串%JAVA_HOME

PS C:\Users\jasonfil> echo %JAVA_HOME%
%JAVA_HOME%

我的目標是能夠隨意在 Java 版本之間切換,就像基於 UNIX 的系統中的update-alternatives機制一樣。 有任何想法嗎?

您得到的所有輸出都符合預期

  1. JAVA_HOME與 Java 版本無關。 它只是一個變量,通常大多數基於 Java 的軟件(例如 Web & App 服務器、IDE 等)使用它來指代 JDK 安裝。 因此,您應該將其設置為 JDK 的基本文件夾,例如C:\Program Files\Java\jdk1.8.0_261
  2. java -version查找位於 JDK 安裝的bin文件夾內的java.exe ,例如C:\Program Files\Java\jdk1.8.0_261\bin 因此, C:\Program Files\Java\jdk1.8.0_261\bin應該是PATH變量中的值之一。 如果您已經如上所述設置了JAVA_HOME ,則設置java.exe的路徑會變得更容易,因為您可以在PATH變量中設置%JAVA_HOME%\bin而不是C:\Program Files\Java\jdk1.8.0_261\bin
  3. echo %JAVA_HOME%將返回您在JAVA_HOME變量中設置的值。 同樣,如果您使用echo %PATH% ,您將獲得在PATH變量中設置的值。

注意:不向您提供從 Java-11 開始的 JRE。

Java 不使用JAVA_HOME環境變量。 有些工具可以,尤其是在安裝工具期間,但那是不同的。

Java 甚至不需要在PATH上,但如果是的話肯定會更方便。

問題表明在C:\Program Files (x86)\Java\jre1.8.0_261安裝了一個 Java。

它還顯示某處有一個 OpenJDK 11.0.8,但沒有顯示在哪里,所以對於這個答案,我們假設它已安裝/解壓縮到C:\foo\openjdk-11.0.8

java可執行文件位於bin文件夾中,因此要顯示PATHJAVA_HOME無關緊要,請運行完全限定的java命令。 在我的機器上,我得到以下輸出(具有不同的實際路徑,我有不同的版本,但無論如何)

C:\>"C:\Program Files (x86)\Java\jre1.8.0_261\bin\java" -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
C:\>C:\foo\openjdk-11.0.8\bin\java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)

運行不合格的java當然更容易,所以把你想要的java的bin文件夾加到PATH前面 您甚至可以在命令提示符中更改該命令提示符的“默認”Java,而不會影響該環境屬性對話框中指定的“全局默認值”。

如果需要,您可以在同一命令提示符下繼續執行此操作來來回切換,但您希望限制這一點,因為PATH會變得越來越長,並且有很多冗余條目,您執行的次數越多。

C:\>set PATH=C:\Program Files (x86)\Java\jre1.8.0_261\bin;%PATH%

C:\>java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

C:\>set PATH=C:\foo\openjdk-11.0.8\bin\java\bin;%PATH%

C:\>java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)

cmd 和 Powershell 都將引用 Path 變量來檢查請求的可執行文件是否在 PATH 中。 JAVA_HOME 變量將僅由 IDE 或 Java 應用程序使用。 因此,要在路徑中包含所需的 JDK,請將路徑環境變量的 JDK 路徑附加到用戶變量(如果您希望此設置只影響當前登錄的用戶,即您的登錄名)或系統變量。

添加這些設置后,請確保重新打開 cmd 或 Powershell 控制台以使設置生效。

如果 PATH 環境變量包含您機器上每個 java 安裝的條目,那么控制台將始終使用首先出現在 PATH 環境變量中的 java 安裝。 如果要使用特定版本的 java,請修改路徑環境變量,以便在任何其他已安裝的 java 版本之前聲明 java 的 bin 文件夾版本。

我添加了環境變量,然后重新啟動我的機器運行良好。

暫無
暫無

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

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