在 Windows 中的不同 JDK 版本之间切换

2022-09-01 15:25:16

我正在从事一些项目,其中一些使用不同的JDK。在 JDK 版本之间切换并不舒适。所以我想知道是否有任何简单的方法来改变它?

我找到了2种方法,应该可以解决这个问题,但它不起作用。

第一个解决方案是创建一个像这样的蝙蝠文件:

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

在运行这个蝙蝠之后,我看到了正确版本的Java。但是当我关闭这个CMD并打开一个新的CMD并键入“java -version”时,它说我仍然有1.8.0_25。所以它不起作用。

我发现的第二个解决方案是来自站点的应用程序。它也不行。与第一个解决方案中的效果相同。

有什么想法吗?因为通过以下方式更改JAVA_HOME和PAHT:Win + Pause ->高级系统设置->环境变量->并编辑这些变量,是可怕的方式...


答案 1

该命令仅适用于当前终端。要永久设置系统或用户环境变量,可以使用 setxset

setx JAVA_HOME "C:\Program Files\Java\jdk1.7.0_72" /m

该选项用于设置变量系统范围(而不仅仅是当前用户)。必须以管理员身份运行终端才能使用此选项。/m

该变量将在所有新的终端窗口中可用,但当前终端窗口不可用。如果还想在同一窗口中使用路径,则需要同时使用 和 。setsetx

如果只输入一次变量,而不是完整的 JDK 路径,则可以避免操作变量。如果更改 ,也会更新。PATH%JAVA_HOME%JAVA_HOMEPATH


还有一些环境变量编辑器可以替代繁琐的Windows环境变量设置。请参阅超级用户上的“有没有一种方便的方法在Windows 7中编辑PATH?”


答案 2

如果有人想在每个新命令窗口中频繁切换,那么我使用以下方法。

命令提示符版本:

使用以下代码创建批处理文件。您可以使用 if 和 else 块添加 n 个版本。

@echo off
if "%~1" == "11" (
   set "JAVA_HOME=C:\Software\openjdk-11+28_windows-x64_bin\jdk-11"
) else (
   set "JAVA_HOME=C:\Program Files\Java\jdk1.8.0_151"
)
set "Path=%JAVA_HOME%\bin;%Path%"
java -version

将此批处理文件另存为 SJV.bat并将此文件位置添加到计算机的 Path 环境变量中。所以现在SJV将充当“切换Java版本”的命令。

现在打开新的命令窗口,只需键入它就会切换到Java 11。键入它将切换到Java 8。SJV 11SJV 8

PowerShell Version

使用以下代码创建 powershell(ps1) 文件。您可以使用 if 和 else 块添加 n 个版本。

If($args[0] -eq "11")
{
    $env:JAVA_HOME = 'C:\Software\openjdk-11+28_windows-x64_bin\jdk-11'
}else{
    $env:JAVA_HOME = 'C:\Program Files\Java\jdk1.8.0_151'
}
$env:Path = $env:JAVA_HOME+'\bin;'+$env:Path
java -version

将此脚本文件另存为 SJV.ps1,并将此文件位置添加到计算机的 Path 环境变量中。所以现在SJV将充当“切换Java版本”的命令。

现在打开新的powershell窗口,只需键入它就会切换到Java 11。键入 OR 它将切换到 Java 8。SJV 11SJV 8SJV

我希望这可以帮助那些想要经常改变它的人。


推荐