[英]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 也是如此。 我也以管理員身份嘗試過cmd
和Powershell。 同樣的問題。
奇怪的是,當我從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
機制一樣。 有任何想法嗎?
您得到的所有輸出都符合預期。
JAVA_HOME
與 Java 版本無關。 它只是一個變量,通常大多數基於 Java 的軟件(例如 Web & App 服務器、IDE 等)使用它來指代 JDK 安裝。 因此,您應該將其設置為 JDK 的基本文件夾,例如C:\Program Files\Java\jdk1.8.0_261
。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
。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
文件夾中,因此要顯示PATH
和JAVA_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.