问题是Java 8安装了很多你并不真正需要的东西:
\windows\system32 包含 Java 8 java.exe、javaw.exe 和 javaws.exe。您的路径可能在开始时有 system32,因此默认情况下,这些路径往往会运行。
系统路径变量以 C:\programdata\Oracle\Java\javapath 开头。此文件夹包含 java.exe、javaw.exe 和 javaws.exe作为 JRE 8 可执行文件的符号链接。
我已经删除了system32文件,并从系统路径中删除了C:\programdata\Oracle\Java\javapath。这似乎可以解决问题。我现在可以通过将JAVA_HOME和 PATH 指向相应的文件夹来切换版本。
甲骨文似乎决心要让运行多个版本变得困难。这在JRE中是可以理解的,但对于JDK来说却是疯狂的,因为开发人员几乎总是需要多个版本的Java。
编辑:我发现这个批处理脚本对于切换JDK很有用。用法:jdk.bat 6|7|8。您可能必须编辑 Java 的安装位置。
@echo off
if "%1"=="" goto report
set _version=%1
shift
if "%1"=="DBG" shift & echo on
set _command=%1 %2 %3 %4 %5
set _jdkdir=
set _jdkver=
for /D %%f in ("C:\Program Files\java\"jdk1.%_version%.*) do call :found "%%f"
if "%_jdkdir%"=="" goto notfound
set java_home=C:\Program Files\java\%_jdkdir%
call :javapath
path %new_path%
goto :report
:javapath
setlocal enabledelayedexpansion
set _jdirs=
for /D %%j in ("C:\Program Files\java\*") do set _jdirs=!_jdirs!#%%~fj\bin
set _jdirs=%_jdirs%#
set _javabin=%java_home%\bin
set _fpath="%PATH:;=" "%"
call :checkpath %_fpath%
endlocal & set new_path=%_javabin%
goto :eof
:checkpath
if _%1==_ goto :eof
echo %_jdirs% | find /i "#%~1#" 1>nul 2>&1
set _err=%errorlevel%
if not %_err%==0 set _javabin=%_javabin%;%~1
if %_err%==0 echo Removed %~1 from path
shift
goto :checkpath
:report
javac -version
%_command%
goto :eof
:notfound
echo No JDK matching [C:\Program Files\java\jdk1.%_version%.*] found.
goto :eof
:found
set _jdkdir=%~n1%~x1
for /F "tokens=2,3 delims=." %%a in ("%_jdkdir%") do set _jdkver=1.%%a.%%b
goto :eof