Windows上的JAVA_HOME似乎无效

问题描述

我的系统上有三个不同的JDK,因此我可以在项目之间进行适当的切换。在我的IDE中导入适当的JDK没问题,但是命令行是。看到事实,尽管我的用户和系统的JAVA_HOME都指向jre1.8.0_261

My system variables

java --version似乎仍然认为我的认设置是Amazon的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版本之间切换,就像update-alternatives机制在基于UNIX的系统中一样。有什么想法吗?

解决方法

您获得的所有输出均符合预期

  1. import与Java版本无关。通常,大多数基于Java的软件(例如,Web和App服务器,IDE等)都使用此变量来查找JDK安装。因此,您应该将其设置为JDK的基本文件夹,例如JAVA_HOME
  2. C:\Program Files\Java\jdk1.8.0_261在JDK安装的java -version文件夹中查找java.exe,例如bin。因此,C:\Program Files\Java\jdk1.8.0_261\bin应该是您的C:\Program Files\Java\jdk1.8.0_261\bin变量中的值之一。如果您已经如上所述设置了PATH,则可以在JAVA_HOME变量中设置java.exe而不是%JAVA_HOME%\bin来简化C:\Program Files\Java\jdk1.8.0_261\bin的路径设置。
  3. PATH将返回您在echo %JAVA_HOME%变量中设置的值。同样,如果使用JAVA_HOME,则会在echo %PATH%变量中获得设置的值。

注意:没有为您提供以Java-11开头的JRE。

,

Java不使用JAVA_HOME环境变量。有些工具可以使用,特别是在工具安装过程中,但是有所不同。

甚至不需要在PATH上使用Java,但如果使用Java,肯定会更方便。

该问题表明在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 front 中。您甚至可以在命令提示符下执行该操作,以更改该命令提示符的“默认” 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安装的条目,则控制台将始终使用Java安装,该安装首先出现在PATH环境变量中。如果要使用特定版本的Java,请修改path环境变量,以便在安装的所有其他Java版本之前声明Java的bin文件夹版本。