问题描述
我的系统上有三个不同的JDK,因此我可以在项目之间进行适当的切换。在我的IDE中导入适当的JDK没问题,但是命令行是。看到事实,尽管我的用户和系统的JAVA_HOME
都指向jre1.8.0_261
:
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的系统中一样。有什么想法吗?
解决方法
您获得的所有输出均符合预期。
-
import
与Java版本无关。通常,大多数基于Java的软件(例如,Web和App服务器,IDE等)都使用此变量来查找JDK安装。因此,您应该将其设置为JDK的基本文件夹,例如JAVA_HOME
。 -
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
的路径设置。 -
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
文件夹中,因此要显示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
的 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文件夹版本。