[英]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.