Подтвердить что ты не робот

Правильная установка java 8 вместе с java 7

У меня установлен JDK 1.7 на моем компьютере с Windows 7 и после установки JDK 1.8 u20 у меня возникла следующая ошибка:

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.

Моя переменная PATH указывает на более старую версию (т.е. 1.7).

Что здесь не так и как я могу использовать java 8 вместе с java 7?

4b9b3361

Ответ 1

Проблема в том, что 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.

EDIT: Я считаю, что эта партия script полезна для переключения 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

Ответ 2

В меню START введите "regedit", чтобы открыть редактор реестра

Перейдите в раздел "HKEY_LOCAL_MACHINE" в левой части редактора/дерева меню реестра

Нажмите "ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ" в реестре "HKEY_LOCAL_MACHINE"

Нажмите "JavaSoft" в реестре "SOFTWARE"

Нажмите "Java Runtime Environment" в списке реестров "JavaSoft" здесь вы можете увидеть разные версии установленной java

Нажмите "Java Runtime Environment". С правой стороны вы получите 4-5 строк. Выберите "CurrentVersion" и щелкните правой кнопкой мыши (выберите вариант изменения) Изменить версию на "1.7"

Теперь волшебство завершено

Ответ 3

Вы не можете иметь свой торт и съесть его тоже.:) Когда вы устанавливаете переменную PATH в JDK 1.8, проблема должна быть решена. Вы можете запускать свои программы в JDK 1.7, установив PATH вручную, используя команду PATH из командной строки или можете перейти в каталог JDK 1.7 и запустить свою программу оттуда. Но в вашем PATH может быть только один JDK.

Ответ 4

У меня была такая же проблема, тогда я понял, что моя программа заканчивается c:\Windows\SysWOW64 и, следовательно, запускает старую java.exe. Как только я перестал бежать из этого каталога (который содержит Java 7 exe), проблема исчезла, так как она правильно соответствовала пути к java8.

Ответ 5

Если вам неудобно удалять какие-либо файлы в Windows вручную, просто поместите свой путь JAVA_HOME в папку с Windows.

Определите переменную среды JAVA_HOME в Windows 7 и используйте ее в переменной PATH в первой позиции переменной Path.

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

Ответ 6

Вы можете определить псевдоним java7, который приведет к папке bin вашего JDK7, а затем измените переменную среды так, чтобы она указывала JDK8. По умолчанию JDK будет JDK8.

Ответ 7

Спасибо @Chris, для меня было решено просто удалить файлы из C:\Windows\System32.

У меня возникла эта проблема при использовании команды Sencha, но, конечно, это не имеет ничего общего с Sencha. Это проблема установки Java.

Очевидно, эта проблема также была очень раздражающей для людей с Java 1.6 и 1.7 в соответствии с этим постом: Ключ реестра "..." имеет значение "1.7" , но требуется "1.6" . Java 1.7 установлен и реестр указывает на него

Ответ 8

В моем случае я удалил другие версии Java, сохраняя более новую версию

У меня были Java 7 и Java 8 в системе.

Я удалил 7 и сохранил 8, в пути у меня уже был Java 8.

Это сработало для меня:)

Ответ 9

Эта проблема вызывает раздражение при работе с несколькими JDK для разработки в Windows 10 (я не мог использовать изменение пути системы ОС, как это предлагается здесь).

В качестве частичного ответа (так как это может не предназначаться как "правильно" ), я довольно хорошо использую Cygwin для переключения JAVA_HOME и запускает сборки Maven с разными JDK (1.7.1.8) (через установщиков Oracle). Поэтому, если у вас установлен Cygwin (или может его установить и использовать) и вы хотите использовать переменную env JAVA_HOME (полезную с Maven, как в этом примере ниже), вы можете сделать это (НО НО знать "трюк" в ответе по ссылке 1 и соответственно настройте локальные пути):

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

(вывод mvn -version)

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17: 41: 47 + 01: 00) Maven: C:\Work2\bin\apache-maven-3.3.9-bin\apache-maven-3.3.9 Версия Java: 1.8.0_74, поставщик: Oracle Corporation Java home: C:\Progra ~ 1\Java\jdk1.8.0_74\jre Язык по умолчанию: it_IT, платформа кодирование: Cp1252 Название ОС: "Windows 10", версия: "10.0", arch: "amd64", family: "dos"

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

(вывод mvn -version)

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17: 41: 47 + 01: 00) Maven: C:\Work2\bin\apache-maven-3.3.9-bin\apache-maven-3.3.9 Версия Java: 1.7.0_79, поставщик: Oracle Corporation Java home: C:\Work2\bin\Java\jdk1.7.0_79_64bit\jre Язык по умолчанию: it_IT, платформенная кодировка: Cp1252 Название ОС: "windows 8.1", версия: "6.3", arch: "amd64", family: "windows"

fooobar.com/questions/161078/...

Ответ 10

Отредактируйте этот текст в базе своих собственных значений, сохраните как ".reg", выполните, наслаждайтесь:)

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