web-dev-qa-db-fra.com

Installer correctement Java 8 avec Java 7

JDK 1.7 est installé sur mon ordinateur Windows 7 et, après l’installation de JDK 1.8 u20, je rencontre l’erreur suivante:

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.

Ma variable PATH pointe vers l’ancienne version (c’est-à-dire 1.7). 

Qu'est-ce qui ne va pas ici et comment utiliser Java 8 avec Java 7?

34
bachr

Le problème est que Java 8 installe beaucoup de choses dont vous n’avez pas vraiment besoin:

  • \windows\system32 contient Java 8Java.exe, javaw.exeetjavaws.exe. Votre chemin a probablement system32 presque au début, ils ont donc tendance à être exécutés par défaut. 

  • La variable de chemin système commence par C:\programdata\Oracle\Java\javapath . Ce dossier contient Java.exe , javaw.exe et javaws.exe en tant que liens symboliques vers les exécutables JRE 8.

J'ai supprimé les fichiers system32 et supprimé C:\programdata\Oracle\Java\javapath du chemin d'accès système. Cela semble résoudre le problème. Je peux maintenant changer de version en pointant Java_HOME etCHEMINvers les dossiers appropriés.

Il semble que Oracle soit déterminé à rendre difficile l’exécution de plusieurs versions. Cela est compréhensible avec JRE, mais c’est fou avec les JDK, car les développeurs ont presque toujours besoin de plusieurs versions de Java.

EDIT: Je trouve ce script batch utile pour changer de JDK. Utilisation: jdk.bat 6 | 7 | 8. Vous devrez peut-être modifier l'emplacement d'installation de 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
68
Chris

Dans le menu Démarrer, tapez "regedit" pour ouvrir l'éditeur de registre.

Allez à "HKEY_LOCAL_MACHINE" dans le menu de gauche de l'explorateur du registre et du registre

Cliquez sur "LOGICIEL" dans les registres "HKEY_LOCAL_MACHINE".

Cliquez sur "JavaSoft" dans les registres "LOGICIEL".

Cliquez sur "Java Runtime Environment" dans la liste de registres "JavaSoft". Vous pouvez voir les différentes versions de Java installé. 

Cliquez sur "Environnement d'exécution Java" - Sur la droite, vous obtiendrez 4 à 5 lignes. Veuillez sélectionner "CurrentVersion" et faire un clic droit (sélectionnez l'option de modification) Changer de version en "1.7"

Maintenant la magie est terminée 

11
satender

Vous ne pouvez pas avoir votre gâteau et le manger aussi. :) Lorsque vous définissez votre variable PATH sur JDK 1.8, le problème devrait résoudre. Vous pouvez exécuter vos programmes dans JDK 1.7 en définissant PATH manuellement à l'aide de set PATH à partir de la commande Invite ou vous pouvez accéder au répertoire JDK 1.7 et exécuter votre programme à partir de là . Mais il ne peut y avoir qu'un seul JDK dans votre PATH.

3
RehanZahoor

J'ai eu le même problème, puis j'ai réalisé que mon programme était à court de c:\Windows\SysWOW64 et donc exécutait l'ancien Java.exe. Une fois que j'ai arrêté de manquer de ce répertoire (qui contient le Java 7 exe), le problème a disparu car il suivait correctement le chemin d'accès à Java8.

3
Mycroft_IV

Si vous n'êtes pas à l'aise pour supprimer manuellement des fichiers dans Windows, il suffit de placer votre chemin Java_HOME devant les répertoires Windows.

Définissez la variable d’environnement Java_HOME dans Windows 7 et utilisez-la dans la variable PATH à la première position de la variable Path.

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

Merci @Chris, pour moi cela a été résolu en supprimant simplement les fichiers de C:\Windows\System32.

J'ai eu ce problème en utilisant la commande Sencha, mais bien sûr, cela n'a rien à voir avec Sencha. C'est un problème d'installation de Java.

Apparemment, ce problème était également vraiment gênant pour les utilisateurs de Java 1.6 et 1.7 selon ce post: La clé de registre '...' a la valeur '1.7', mais '1.6' est requise. Java 1.7 est installé et le registre l'indique

1
Alex MM

Vous pouvez définir un alias Java7 qui mènerait au dossier bin de votre JDK7, puis modifier votre variable d'environnement afin qu'elle pointe vers JDK8. Le JDK par défaut serait alors JDK8.

1
Dici

Dans mon cas, j'ai désinstallé d'autres versions de Java en conservant la version la plus récente. 

J'ai eu Java 7 et Java 8 dans le système.

J'ai désinstallé 7 et gardé 8, dans le chemin, j'avais déjà Java 8.

Cela a fonctionné pour moi :)

1
Punith Kumar

Éditez ce texte en vous basant sur vos propres valeurs, enregistrez-le sous ".reg", exécutez-le, profitez-en :)

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

Ce problème est agaçant lorsque vous utilisez plusieurs JDK pour le développement sous Windows 10 (je ne pouvais pas utiliser le changement de chemin d'accès au système d'exploitation, comme suggéré ici). 

En guise de réponse partielle (car cela pourrait ne pas être conçu comme une installation "correctement"), je me débrouille assez bien avec Cygwin pour changer Java_HOME et exécuter des versions de Maven avec différents JDK (1.7,1.8) installés (via les programmes d'installation Oracle). . Donc, si vous avez Cygwin installé (ou pouvez l'installer et l'utiliser) et que vous souhaitez utiliser la variable d'environnement Java_HOME (utile avec Maven comme dans cet exemple ci-dessous), vous pouvez le faire comme ceci (MAIS soyez conscient du "truc" dans la réponse au lien 1 et ajustez vos chemins locaux en conséquence):

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

(sortie mvn --version)

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 version Java: 1.8.0_74, fournisseur: Oracle Corporation Accueil Java: C:\Progra ~ 1\Java\jdk1.8.0_74\jre Paramètres régionaux par défaut: it_IT, plateforme codage: Cp1252 Nom du système d'exploitation: "Windows 10", version: "10.0", Arch: "AMD64", famille: "dos"

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

(sortie mvn --version)

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 version Java: 1.7.0_79, fournisseur: Oracle Corporation Java home: C:\Work2\bin\Java\jdk1.7.0_79_64bit\jre Paramètres régionaux par défaut: it_IT, codage de la plate-forme: Cp1252 Nom du système d'exploitation: "Windows 8.1", version: "6.3", Arch: "AMD64", famille: "windows"

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

0
Diego1974