Правильная установка 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?
Ответы
Ответ 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"