【发布时间】:2021-01-05 17:55:23
【问题描述】:
我的系统上有三个不同的 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 机制一样。有什么想法吗?
【问题讨论】:
-
stackoverflow.com/questions/63910493/… 这能回答你的问题吗?
-
没有理由在用户和系统环境下将
JAVA_HOME列为具有相同值C:\Program Files (x86)\Java\jre1.8.0_261。由于用户环境优先于系统,我通常建议删除 System.xml 下的条目。但是,我的一般经验法则是,用户环境应该只包含用户自己的配置文件树中的值路径,或者其他用户不应访问的值路径。您需要自己决定要删除两者中的哪一个。顺便说一句,在 PowerShell 中,您将访问变量为$Env:JAVA_HOME而不是%JAVA_HOME%。 -
目前的答案已经涵盖了这一点,但要明确一点:Java 根本不使用
JAVA_HOME环境变量。 各种工具将使用该变量,例如IDE 和构建工具,但 Java 本身并不关心该变量,也不读取它。与任何其他可执行程序一样,java.exe 的位置由您的Path环境变量决定。 -
请查看What is the reason for "X is not recognized as an internal or external command, operable program or batch file"? 它详细解释了
cmd.exe和powershell.exe(以及cscript.exe和wscript.exe以及许多其他应用程序和Windows 功能)如何找到可执行文件或指定的脚本文件没有路径和文件扩展名。 -
所有使用接受的答案和这些 cmets 修复。非常感谢。
标签: java windows powershell cmd java-home