Properly installing java 8 along with java 7

50,424

Solution 1

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

Solution 2

In the START menu type "regedit" to open the Registry editor

Go to "HKEY_LOCAL_MACHINE" on the left-hand side registry explorer/tree menu

Click "SOFTWARE" within the "HKEY_LOCAL_MACHINE" registries

Click "JavaSoft" within the "SOFTWARE" registries

Click "Java Runtime Environment" within the "JavaSoft" list of registries here you can see different versions of installed java

Click "Java Runtime Environment"- On right hand side you will get 4-5 rows . Please select "CurrentVersion" and right Click( select modify option) Change version to "1.7"

Now the magic has been completed

Solution 3

You can't have your cake and eat it too. :) When you set your PATH variable to JDK 1.8, The problem should resolve. You can run your programs in JDK 1.7 by setting PATH manually using set PATH from command prompt or can go to the JDK 1.7 directory and run your program from there. But there can be only one JDK in your PATH.

Solution 4

I had the same problem then realized my program was running out of c:\Windows\SysWOW64 and hence running the old java.exe. Once I stopped running out of that directory (which contains the Java 7 exe), the problem went away since it followed the path properly to java8.

Solution 5

If you are not comfortable to remove any files in Windows manually, just put your JAVA_HOME path in the front of Windows dirs.

Define JAVA_HOME environment variable in Windows 7 and use it in variable PATH on first position of Path variable.

JAVA_HOME -> D:\dev\Java\jdk1.8.0_45
Path -> %JAVA_HOME%\bin;%SystemRoot%\system32;
Share:
50,424
bachr
Author by

bachr

Updated on July 09, 2022

Comments

  • bachr
    bachr almost 2 years

    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 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion'
    has value '1.8', but '1.7' is required.
    Error: could not find java.dll
    Error: Could not find Java SE Runtime Environment.
    

    My PATH variable points to the older version (i.e. 1.7).

    What is wrong here and how I could use java 8 along with java 7?

  • Mr. Llama
    Mr. Llama over 9 years
    Bah! That did the trick for me! I did everything else but it was still throwing issues. Removing them from the SysWOW64 folder was the final bit I needed.
  • Jeff Miller
    Jeff Miller over 9 years
    I agree. Oracle does not make it easy to use multiple JDK's. I removed C:\programdata\Oracle\Java\javapath from my path to allow me to use plain old environment variables to control jdk to use.
  • srinivas
    srinivas almost 9 years
    Updating Path variable in Environment variables to jdk 1.8 resolved , showing the above error.
  • James Drinkard
    James Drinkard over 8 years
    I'm running java 1.6, but I have 1.7 and 1.8 installed in windows 7 and this fixed it. Thanks!
  • peter_pilgrim
    peter_pilgrim over 8 years
    This little DOS script works rather well. I saved it as switch-jdk.bat' in the %USERPROFILE%\bin. I was able to run it with switch-jdk 7' and then switch-jdk 8' and then switch-jdk 9'. Of course, add %USERPROFILE%\bin to your PATH environment first! Has anyone written a BASH shell equivalent to this yet?