我已JAVA_HOME
在用户的环境变量中定义为 jdk11 并PATH
包含%JAVA_HOME%/bin
在其中。
现在我想通过更改为 jdk8 在命令提示符(cmd
)中临时切换JAVA_HOME
到 jdk8,但它不会改变值path
或java -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
。如果将它们混淆,将会发生不可预测的事情!
答案2
原因是,PATH
在赋值给 时, 中的变量引用被扩展PATH
,任何后续更改都将被忽略,对原始值的引用将丢失。这就像复制变量的值,而不是创建对变量的引用。
set JAVA_HOME=C:\dir1
PATH=%JAVA_HOME%
set JAVA_HOME=C:\dir2
PATH
这将输出C:\dir1
(JAVA_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
。这个解决方案对我来说非常有效。