的問題是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指向相應的文件夾來切換版本。
Oracle似乎決定讓它難以運行多個版本。 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
我同意。 Oracle使用多個JDK並不容易。我從我的路徑中刪除了C:\ programdata \ Oracle \ Java \ javapath,以允許我使用普通的舊環境變量來控制jdk的使用。 – 2015-01-21 18:01:43
同意。這個答案解決了我最近半小時面臨的問題!謝謝 – 2015-07-28 07:56:16
我正在運行java 1.6,但我有1.7和1.8安裝在Windows 7中,並修復它。謝謝! – 2015-10-01 16:17:43