在Windows中切换不同的JDK版本

时间:2014-11-18 11:22:50

标签: java windows environment-variables

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

我找到了两种解决这个问题的方法,但它不起作用。

首先解决方案是创建这样的bat文件:

@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并打开一个新的并输入“java -version”时,它说我仍然有1.8.0_25。所以它不起作用。

我找到的第二个解决方案是来自this 网站的应用程序。它也不起作用。与第一种解决方案中的效果相同。

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

4 个答案:

答案 0 :(得分:17)

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

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

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

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

如果您只在PATH放置%JAVA_HOME%而不是完整的JDK路径,则可以避免操作JAVA_HOME变量。如果您更改PATH,{{1}}也会更新。


还有一些环境变量编辑器可以替代繁琐的Windows环境变量设置。见" Is there a convenient way to edit PATH in Windows 7?"超级用户。

答案 1 :(得分:1)

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

使用以下代码创建批处理文件。您可以使用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版本”的命令。

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

我希望这对想要经常更改它的人有所帮助。

答案 2 :(得分:0)

如果您的路径少于1024个字符,则可以执行(以管理员身份运行)此脚本:

@echo off 
set "JAVA5_FOLDER=C:\Java\jdk1.5.0_22"
set "JAVA6_FOLDER=C:\Java\jdk1.6.0_45"
set "JAVA7_FOLDER=C:\Java\jdk1.7.0_80"
set "JAVA8_FOLDER=C:\Java\jdk1.8.0_121"
set "JAVA9_FOLDER=C:\Java\jdk-10.0.1"
set "CLEAR_FOLDER=C:\xxxxxx"

(echo "%PATH%" & echo.) | findstr /O . | more +1 | (set /P RESULT= & call exit /B %%RESULT%%)
set /A STRLENGTH=%ERRORLEVEL%
echo path length = %STRLENGTH%
if %STRLENGTH% GTR 1024  goto byebye 

echo Old Path: %PATH%
echo =================== 
echo Choose new Java Version:
echo [5] JDK5
echo [6] JDK6 
echo [7] JDK7
echo [8] JDK8
echo [9] JDK10
echo [x] Exit

:choice 
SET /P C=[5,6,7,8,9,x]? 
for %%? in (5) do if /I "%C%"=="%%?" goto JDK_L5 
for %%? in (6) do if /I "%C%"=="%%?" goto JDK_L6
for %%? in (7) do if /I "%C%"=="%%?" goto JDK_L7 
for %%? in (8) do if /I "%C%"=="%%?" goto JDK_L8 
for %%? in (9) do if /I "%C%"=="%%?" goto JDK_L9
for %%? in (x) do if /I "%C%"=="%%?" goto byebye
goto choice 

@echo on
:JDK_L5  
set "NEW_PATH=%JAVA5_FOLDER%"
goto setPath

:JDK_L6  
@echo off 
set "NEW_PATH=%JAVA6_FOLDER%"
goto setPath

:JDK_L7  
@echo off 
set "NEW_PATH=%JAVA7_FOLDER%"
goto setPath

:JDK_L8  
@echo off 
set "NEW_PATH=%JAVA8_FOLDER%"
goto setPath

:JDK_L9  
@echo off 
set NEW_PATH = %JAVA9_FOLDER%

:setPath
Call Set "PATH=%%PATH:%JAVA5_FOLDER%=%CLEAR_FOLDER%%%"
Call Set "PATH=%%PATH:%JAVA6_FOLDER%=%CLEAR_FOLDER%%%"
Call Set "PATH=%%PATH:%JAVA7_FOLDER%=%CLEAR_FOLDER%%%"
Call Set "PATH=%%PATH:%JAVA8_FOLDER%=%CLEAR_FOLDER%%%"
Call Set "PATH=%%PATH:%JAVA9_FOLDER%=%CLEAR_FOLDER%%%"
rem echo Interim Path: %PATH%
Call Set "PATH=%%PATH:%CLEAR_FOLDER%=%NEW_PATH%%%" 

setx PATH "%PATH%" /M

call set "JAVA_HOME=%NEW_PATH%"
setx JAVA_HOME %JAVA_HOME% 

echo New Path: %PATH%
:byebye
echo
java -version
pause

如果超过1024,请尝试删除一些不必要的路径,或者使用https://superuser.com/questions/387619/overcoming-the-1024-character-limit-with-setx的某些输入修改此脚本

答案 3 :(得分:0)

  1. 打开Environment Variables编辑器(文件资源管理器>右键单击 此PC>属性>高级系统设置>环境 变量...)
  2. 系统变量列表中
  3. 找到Path变量> 按编辑>将%JAVA_HOME%bin;放在第一个位置。这是必需的 因为Java安装程序会将C:\Program Files (x86)\Common Files\Oracle\Java\javapath添加到PATH,而setx引用了最新安装的Java版本。 enter image description here
  4. 现在您可以使用setx /m JAVA_HOME "c:\Program Files\Java\jdk-10.0.1\ 命令在Java版本之间进行切换(应在管理权限下运行):

    c:\Program Files\Java\jdk-10.0.1\"

    (请注意:该行的末尾没有双引号,并且不应将双引号引起来。否则您的JAVA_HOME变量中将得到PATH,这会破坏您的PATH变量)

使用系统变量(和管理权限)的解决方案更加健壮,因为它在生成的{{1}}变量的开头放置了所需的Java路径。