web-dev-qa-db-de.com

Richtige Installation von Java 8 zusammen mit Java 7

Ich habe JDK 1.7 auf meinem Windows 7-Rechner installiert und nach der Installation von JDK 1.8 u20 habe ich folgende Fehlermeldung:

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.

Meine Variable PATH zeigt auf die ältere Version (d. H. 1.7). 

Was ist hier falsch und wie kann ich Java 8 zusammen mit Java 7 verwenden?

34
bachr

Das Problem ist, dass Java 8 eine Menge Dinge installiert, die Sie nicht wirklich brauchen:

  • \ windows\system32 enthält Java 8 Java.exe, javaw.exe und javaws.exe. Ihr Pfad hat wahrscheinlich system32 am Anfang, so dass diese standardmäßig ausgeführt werden. 

  • Die Systempfadvariable beginnt mit C:\programdata\Oracle\Java\javapath. Dieser Ordner enthält Java.exe, javaw.exe und javaws.exe als Symlinks zu den ausführbaren Dateien von JRE 8.

Ich habe die Dateien system32 gelöscht und C:\programdata\Oracle\Java\javapath aus dem Systempfad entfernt. Dies scheint das Problem zu lösen. Ich kann jetzt die Version wechseln, indem ich Java_HOME und PATH auf die entsprechenden Ordner verweise.

Es scheint, dass Oracle die Ausführung mehrerer Versionen erschwert. Dies ist verständlich für die JRE, aber für JDKs ist es verrückt, da Entwickler fast immer mehrere Java-Versionen benötigen.

BEARBEITEN: Ich finde dieses Batch-Skript zum Wechseln von JDKs nützlich. Verwendung: jdk.bat 6 | 7 | 8. Möglicherweise müssen Sie den Installationspfad für Java bearbeiten.

@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
68
Chris

Geben Sie im Startmenü "regedit" ein, um den Registrierungseditor zu öffnen

Gehen Sie zu "HKEY_LOCAL_MACHINE" im linken Explorer-Baumstrukturmenü

Klicken Sie in den Registern "HKEY_LOCAL_MACHINE" auf "SOFTWARE"

Klicken Sie in den "SOFTWARE" -Registries auf "JavaSoft"

Klicken Sie in der "JavaSoft" -Liste der Registries auf "Java Runtime Environment". Hier können Sie verschiedene Versionen von installiertem Java sehen 

Klicken Sie auf "Java Runtime Environment" - Auf der rechten Seite erhalten Sie 4-5 Zeilen. Bitte wählen Sie "CurrentVersion" und klicken Sie mit der rechten Maustaste (wählen Sie die Änderungsoption) Ändern Sie die Version in "1.7".

Nun ist der Zauber fertig 

11
satender

Du kannst deinen Kuchen nicht haben und auch essen. Wenn Sie Ihre PATH-Variable auf JDK 1.8 setzen, sollte das Problem behoben sein. Sie können Ihre Programme in JDK 1.7 ausführen, indem Sie PATH manuell mit dem Befehl PATH über den Befehl Prompt festlegen. Sie können jedoch auch in das Verzeichnis JDK 1.7 gehen und dort Ihr Programm ausführen . In Ihrem PATH kann jedoch nur ein JDK vorhanden sein.

3
RehanZahoor

Ich hatte das gleiche Problem und merkte dann, dass mein Programm c:\Windows\SysWOW64 ablief und somit den alten Java.exe lief. Nachdem ich dieses Verzeichnis (das den Java 7 exe enthält) nicht mehr laufen konnte, wurde das Problem behoben, da der Pfad ordnungsgemäß nach Java8 folgte.

3
Mycroft_IV

Wenn Sie keine Dateien manuell in Windows entfernen möchten, geben Sie Ihren Java_HOME-Pfad vor den Windows-Verzeichnissen an.

Definieren Sie die Java_HOME-Umgebungsvariable in Windows 7 und verwenden Sie sie in der Variablen PATH an der ersten Position der Path-Variablen.

Java_HOME -> D:\dev\Java\jdk1.8.0_45
Path -> %Java_HOME%\bin;%SystemRoot%\system32;
2

Danke @Chris, für mich wurde das Löschen der Dateien aus C:\Windows\System32 gelöst.

Ich habe dieses Problem bei der Verwendung des Sencha-Befehls bekommen, aber es hat natürlich nichts mit Sencha zu tun. Es ist ein Java-Installationsproblem.

Anscheinend war dieses Problem auch für Leute mit Java 1.6 und 1.7 laut diesem Beitrag ärgerlich: Der Registrierungsschlüssel '...' hat den Wert '1.7', aber '1.6' ist erforderlich. Java 1.7 ist installiert und die Registry zeigt darauf

1
Alex MM

Sie könnten einen Java7-Alias ​​definieren, der zum Ordner bin Ihres JDK7 führt, und dann Ihre Umgebungsvariable ändern, sodass sie auf JDK8 verweist. Das Standard-JDK wäre dann JDK8.

1
Dici

In meinem Fall habe ich andere Versionen von Java deinstalliert, um eine neuere Version zu behalten 

Ich hatte Java 7 und Java 8 im System.

Ich deinstallierte 7 und behielt 8, im Pfad hatte ich bereits Java 8.

Es hat für mich funktioniert :)

1
Punith Kumar

Bearbeiten Sie diesen Text in Ihren eigenen Werten, speichern Sie als ".reg", führen Sie aus, genießen Sie :)

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.8.0_74]
"JavaHome"="C:\\Program Files\\Java\\jre8"
0
tito76

Dieses Problem ist ärgerlich, wenn Sie mit mehreren JDKs für die Entwicklung unter Windows 10 arbeiten. 

Als unvollständige Antwort (da dies möglicherweise nicht als "richtig" installiert) gedacht ist, mache ich es ziemlich gut, mit Cygwin Java_HOME zu wechseln und Maven-Builds mit verschiedenen JDKs (1.7, 8.1) (über Oracle-Installationsprogramme) auszuführen. Wenn Sie also Cygwin installiert haben (oder installieren und verwenden können) und bereit sind, die Java_HOME-Umgebungsvariable (nützlich mit Maven wie in diesem Beispiel unten) zu verwenden, könnten Sie dies tun (achten Sie jedoch auf den 'Trick' in.) die Antwort unter link 1 und passen Sie Ihre lokalen Pfade entsprechend an):

export Java_HOME=/cygdrive/c/Progra~1/Java/jdk1.8.0_74

(mvn --version ausgabe)

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17: 41: 47 + 01: 00) Maven home: C:\Work2\bin\Apache-maven-3.3.9-bin\Apache-maven-3.3.9 Java-Version: 1.8.0_74, Anbieter: Oracle Corporation Java-Startseite: C:\Progra ~ 1\Java\jdk1.8.0_74\jre Standardgebietsschema: it_IT, Plattform Kodierung: Cp1252 Betriebssystemname: "Windows 10", Version: "10.0", Arch: "AMD64", Familie: "Dos"

export Java_HOME=/cygdrive/c/Work2/bin/Java/jdk1.7.0_79_64bit/

(mvn --version ausgabe)

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17: 41: 47 + 01: 00) Maven home: C:\Work2\bin\Apache-maven-3.3.9-bin\Apache-maven-3.3.9 Java-Version: 1.7.0_79, Hersteller: Oracle Corporation Java-Startseite: C:\Work2\bin\Java\jdk1.7.0_79_64bit\jre Standardgebietsschema: it_IT, Plattformkodierung: Cp1252 Betriebssystemname: "Windows 8.1", Version: "6.3", Bogen: "AMD64", Familie: "Fenster"

https://stackoverflow.com/questions/14567191/export-Java-home-with-spaces-in-cygwin

0
Diego1974