在 cmd 中暂时更改 JAVA_HOME 不会在 Windows 中暂时更改 PATH

在 cmd 中暂时更改 JAVA_HOME 不会在 Windows 中暂时更改 PATH

我已JAVA_HOME在用户的环境变量中定义为 jdk11 并PATH包含%JAVA_HOME%/bin在其中。

现在我想通过更改为 jdk8 在命令提示符(cmd)中临时切换JAVA_HOME到 jdk8,但它不会改变值pathjava -version在当前 cmd 实例中不会改变。

PS-我已删除 c:\Program Data\Oracle\java.. 文件以避免混淆

答案1

它不会改变路径中的值或 java -version 在当前实例中不会改变cmd

由于shell 从父进程继承了其环境,因此您必须重新启动cmd才能使更改生效。cmd


那么从命令行切换 Java 版本的正确方法是什么?

使用一组批处理文件,如下所示:

作为一名 Java 开发人员,我总是在不同的 Java 版本上编译和测试我的代码。但在它们之间切换是个大问题。所以我终于找到了一种简单的方法来做到这一点。您必须创建以下批处理文件并将它们放在您打开命令行的目录中或 SYSTEM PATH 中。您可以使用您最喜欢的文本编辑器来创建这些文件。

jdk14的安装文件

@echo off
echo Setting JAVA_HOME
set JAVA_HOME=C:\j2sdk1.4.2_12
echo setting PATH
set PATH=C:\j2sdk1.4.2_12\bin;%PATH%
echo Display java version
java -version

jdk15安装包

@echo off
echo Setting JAVA_HOME
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_12
echo setting PATH
set PATH=C:\Program Files\Java\jdk1.5.0_12\bin;%PATH%
echo Display java version
java -version

jdk16安装包

@echo off
echo Setting JAVA_HOME
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_11
echo setting PATH
set PATH=C:\Program Files\Java\jdk1.6.0_11\bin;%PATH%
echo Display java version
java -version

确保JAVA_HOME根据 Java 安装情况在批处理文件中分配适当的值。每当您想要在 Java 版本之间切换时,只需运行相应的批处理文件即可。

注意: JAVA_HOME和 java 的路径必须始终引用完全相同的版本JDK。如果将它们混淆,将会发生不可预测的事情!

来源在 Windows 中切换不同的 JDK 版本 | Oracle Pranav 的博客

答案2

原因是,PATH在赋值给 时, 中的变量引用被扩展PATH,任何后续更改都将被忽略,对原始值的引用将丢失。这就像复制变量的值,而不是创建对变量的引用。

set JAVA_HOME=C:\dir1
PATH=%JAVA_HOME%
set JAVA_HOME=C:\dir2
PATH

这将输出C:\dir1JAVA_HOME分配时的值)而不是%JAVA_HOME%

您需要一个如下脚本,在发生更改后调用JAVA_HOME

PATH=%JAVA_HOME%;C:\Windows\system32;C:\Windows;...

答案3

我知道答案有点晚了,但是接受的答案对我来说不起作用,所以我稍微修改了代码并最终得到了以下对我有用的解决方案:

@echo off
echo Setting JAVA_HOME
setx -m JAVA_HOME "C:\Java\jdk-1.7.0_80"
echo setting PATH
setx -m PATH "%JAVA_HOME%\bin;%PATH%"
echo Display java version
java -version

setx -m改变系统变量,但如果您需要更改用户变量,只需省略此参数。由于脚本需要以管理员权限执行,我将脚本存储在 %user_home% 位置并为其创建了一个快捷方式。快捷方式可以放在您想要的任何位置。您需要在快捷方式属性中更改一件事:Right-click the shortcut -> properties -> shortcut tab -> advanced -> run as administrator。这个解决方案对我来说非常有效。

相关内容