Properly installing java 8 along with java 7

前端 未结 10 1203
无人共我
无人共我 2020-12-04 12:52

I\'ve JDK 1.7 installed on my windows 7 machine and after installing JDK 1.8 u20 I\'m having following error:

C:\\>java -version
Error: Registry key \'Sof         


        
10条回答
  •  伪装坚强ぢ
    2020-12-04 13:24

    The problem is that Java 8 installs a lot of stuff that you don't really need:

    • \windows\system32 contains Java 8 java.exe, javaw.exe and javaws.exe. Your path probably has system32 near the beginning, so these tend to be run by default.

    • The system path variable starts with C:\programdata\Oracle\Java\javapath. This folder contains java.exe, javaw.exe and javaws.exe as symlinks to the JRE 8 executables.

    I've deleted the system32 files and removed C:\programdata\Oracle\Java\javapath from the system path. This seems to cure the problem. I can now switch versions by pointing JAVA_HOME and PATH to the appropriate folders.

    Oracle, it seems, are determined to make it hard to run multiple versions. This is understandable with the JRE, but it's crazy with JDKs, as developers almost always need multiple versions of Java.

    EDIT: I find this batch script is useful for switching JDKs. Usage: jdk.bat 6|7|8. You might have to edit the installation location for 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
    

提交回复
热议问题