Windows игнорирует JAVA_HOME: как установить JDK по умолчанию?


89

Как убедить Windows использовать JDK вместо JRE?

Этот вопрос задавали раньше, здесь и в других местах:

Как установить среду установки / выполнения Java по умолчанию (Windows)?

Проблема в том, что Windows игнорирует, JAVA_HOMEа также игнорирует тот факт, что я сделал каталог bin JDK первой записью в пути.

Когда я запускаю java -versionиз командной строки, вместо того, чтобы вызывать мою установку JDK 1.6, она запускает 1.7 JRE.

Я предполагаю, что это проблема, специфичная для 1.7, и Windows 7 делает то, чего не должна делать с реестром.

Есть какие нибудь идеи как это починить?

Изменить : Ой. Я написал выше «первая запись в пути к классам», когда имел в виду «путь». Сожалею.

Ответы:


132

В Windows javaисполняемый файл использует реестр Windows для поиска версии Java по умолчанию для запуска.

Копия java.exeдля запуска находится с помощью PATHпеременной среды. Если вы не примете меры для изменения этого, по умолчанию копия будет найдена в каталоге Windows. Поскольку этой копии нет в каталоге времени выполнения Java, она находит ее, просматривая реестр.

Итак, вам нужно либо изменить реестр, либо поместить нужную версию Java перед каталогом Windows в вашем PATH.


11
ОП здесь. Смотрите мою правку выше. Ага, это решило проблему. Два примечания: во-первых, похоже, что установщик Java действительно поместил java.exe в Windows \ System32. Для меня это поразительно. Во-вторых, при изменении пути в разделе Компьютер / Свойства / Дополнительные параметры системы / Переменные среды необходимо изменить системный путь, а не путь пользователя . Системный путь ставится на первое место.
ccleve

2
Я также подчеркну точку зрения пользователя 237815 о том, что, похоже, установщик Java фактически помещает свой java.exe в Windows \ System32. Для меня это определенно не было интуитивно понятно. Только после проверки «java -версии» с консоли я смог достичь хоть какого-то уровня комфорта, что Windows теперь использует java.exe, который я хотел получить из моей установки JDK, а не какую-то предыдущую и нежелательную версию.
Джон Тоблер

17
В моем случае проблема также была решена путем переименования файлов java.exe, javaw.exe и javaws.exe в папке Windows / System32. Затем, и только тогда, java -version показывает версию, установленную в JAVA_HOME и PATH
Inversus

6
Ты спас мне день! Перемещение записи, связанной с JDK, до Windows в PATH решило проблему. Спасибо огромное!
the_dark_destructor

9
Я поставил %JAVA_HOME%\binпервую позицию pathпеременной в Windows 10 и работаю со мной.
Wendel

30

В Windows 8 вы можете удалить C:\ProgramData\Oracle\Java\javapath каталог.

от пути

Это решило мою проблему.


5
В Windows 10 это: C: \ Program Files (x86) \ Common Files \ Oracle \ Java \ javapath. Это автоматически добавляется к переменной System Path. Удалите этот и установите свой собственный путь.
Декстер

1
вышеупомянутый комментарий помог в случае Windows 10
Саба Аханг

23

У меня тоже есть эта проблема. Я использую 1.6, но хочу создать код, над которым я работаю, с 1.5. Я изменил JAVA_HOMEи PATH(как пользователя, так и систему) безрезультатно.

Ответ в том , что установщик 1.6 упал java.exe, javaw.exeи javaws.exeв мою Windows\System32папку (Windows 7).

Я решил его переименование этих файлов java_wrong.exe, javaw_wrong.exeи javaws_wrong.exe. Только после этого он подбирает правильную версию java, как определено в JAVA_HOMEи PATH. Я переименовал файлы таким образом, потому что это удалило их легко обратимым образом.

Надеюсь это поможет!


10
Вместо переименования вы можете изменить переменную PATH, указав в качестве первого значения% JAVA_HOME% \ bin, таким образом, это будет первое значение, которое оно примет
maxivis

1
@maxivis Спасибо. Я предполагаю, что проблема могла быть в таком порядке элементов PATH, что Windows \ System32 была до JAVA_HOME. Я просто переименовал их, чтобы они были эффективно удалены обратимым способом.
Inversus

Каким-то образом установка JAVA_HOME в пути никак не работала для меня, этот действительно решил это.
Гильерме Ориоли

12

Windows ничего не игнорирует. Это проблема с вашей настройкой; Windows просто использует то, что вы предоставляете. Особых знаний он не имеет JAVA_HOME.

CLASSPATHтоже не имеет ничего общего с Windows. В Windows это только переменная среды, которая расширяется до местоположения папки.

Проверьте %PATH%переменную окружения. Это то, что заставляет Windows находить одно перед другим. Путь (как сказано в сообщении, на которое вы ссылаетесь) должен указывать на %JAVA_HOME%\bin;<remainder of path>. Опять же, сообщение, на которое вы указали ссылку, дает вам возможность установить это с помощью командного файла.

(Для тех, кто может этого не знать: самый простой способ проверить% PATH% - открыть командную строку и ввести текст echo %PATH%. Вы также можете попасть туда, щелкнув правой кнопкой мыши на Computerправой панели меню «Пуск» и выбрав Properties, затем Advanced System Settings, и Environmental Variablesкнопку tne .)


@erickson: Хорошо. Спасибо, я исправлю. Однако это по-прежнему не имеет ничего общего с Windows, что и было целью моего ответа. :)
Ken White

Понятно, я просто был обеспокоен тем, что могло возникнуть новое заблуждение; Java не знает ничего больше, JAVA_HOMEчем Windows.
erickson

Я ценю исправление. Я сам не являюсь Java-специалистом (ограниченный опыт на сегодняшний день), поэтому полезно знать об этом для справок в будущем.
Кен Уайт,

1
JAVA_HOMEдолжен быть установлен в корень установки java. Путь должен быть %JAVA_HOME%\bin;&lt;remainder of path%gt;указан, иначе вы не сможете «найти» java, javac и т. Д. Конечно, Windows действительно смотрит только на PATHпеременную, но некоторые инструменты, связанные с java, смотрят JAVA_HOMEиногда.
Эдвин Бак,

@Edwin: Исправлено и пропавшее \bin. Спасибо.
Ken White

6

Я была такая же проблема. У меня установлено несколько версий Java, и по какой-то причине Java 1.7 использовалась вместо Java 1.6, хотя я указал в пути для использования 1.6 (C: \ jdk1.6.0_45_32 \ bin).

Мне пришлось переместить путь к JDK, который я хотел использовать (1.6), чтобы он был первой записью в переменной среды PATH, чтобы убедиться, что Windows использует 1.6 вместо 1.7.

Так, например, переменная среды PATH раньше была:

C:\Program Files (x86);...<other entries>;C:\dev\ant181\bin;C:\jdk1.6.0_45_32\bin

и после того, как я переместил jdk первым, он сработал:

C:\jdk1.6.0_45_32\bin;C:\Program Files (x86);...<other entries>;C:\dev\ant181\bin

Я предполагаю, что установщик Windows Java 1.7 установил его в какой-то другой каталог, который уже находится в PATH, таким образом, он используется сначала вместо указанной пользовательской записи PATH C: \ jdk1.6.0_45_32 \ bin;


Спасибо, брат. Перемещение пути JAVA_HOME \ bin в качестве первого элемента переменной Path спасло мне жизнь.
ÖMER TAŞCI

4

Для моего случая в 'Path'переменной был добавлен параметр типа " C:\ProgramData\Oracle\Java\javapath;". Это место было имея java.exe, javaw.exeи javaws.exeиз Java 8 , который недавно установленных с помощью jdk.exeот Oracle.

Я удалил этот текст из Пути, где мой Путь уже был %JAVA_HOME%\binс ним.

Теперь переменная 'JAVA_HOME'управляет моей версией Java, которую я хотел.


4

введите описание изображения здесьПредположим, вы установили JDK 10 после JDK 8 и в системной переменной среды задали путь, например "C: \ ProgramData \ Oracle \ Java \ javapath", а затем управление версиями Java по этому пути. он будет игнорировать JAVA_HOME, даже если здесь установлен путь jdk 1.8. Поэтому удалите "C: \ ProgramData \ Oracle \ Java \ javapath" в пути, чтобы получить эффект пути JAVA_HOME


2

У меня были установлены Java 7 и 8, и я хочу перенаправить на java 7, но версия java в моем окне командной строки показывает Java 8.
Добавлен путь к каталогу bin Java 7 ( C: \ Program Files \ Java \ jdk1.7.0_10 \ bin ) в переменную PATH в конце, но не сработало и показывает Java 8. Поэтому я изменил путь Java 7 на начало значения пути, и это сработало.
Открыл новое окно командной строки cmd и проверил мою версию java, и теперь он показывает Java 7



1

В моем случае у меня были установлены Java 7 и 8 (обе x64), и я хочу перенаправить на java 7, но все настроено на использование Java 8. Java использует переменную среды PATH:

C: \ ProgramData \ Oracle \ Java \ javapath

в качестве первого варианта поиска его папки во время выполнения (это скрытая папка). Этот путь содержит 3 символические ссылки, которые нельзя редактировать.

На моем компьютере переменная среды PATH выглядит так:

C: \ ProgramData \ Oracle \ Java \ javapath; C: \ Windows \ System32; C: \ Program Files \ Java \ jdk1.7.0_21 \ bin;

В моем случае это должно выглядеть так:

C: \ Windows \ System32; C: \ Program Files \ Java \ jdk1.7.0_21 \ bin;

Мне пришлось вырезать и вставить символические ссылки в другое место, чтобы Java не могла их найти, и я мог восстановить их позже.

После установки переменных окружения JAVA_HOME и JRE_HOME в нужное время выполнения папок Java (в моем случае это Java 7) команда java -versionдолжна показать желаемую среду выполнения Java. Замечу, что нет необходимости возиться с реестром.

Проверено на Win7 x64.


1

Эта проблема, вероятно, связана с более ранними версиями Java, установленными в вашей системе. Сначала внимательно проверьте свои переменные среды и удалите все переменные среды, связанные с предыдущими версиями JAVA, и замените эти пути на

C:\Program Files\Java\<your new jdk version>\bin

0

Здесь есть дополнительный фактор; в дополнение к исполняемым файлам java, которые установка java помещает везде, где вы просите их разместить, в окнах установщик java также помещает копии некоторых из этих исполняемых файлов в ваш каталог system32 Windows, поэтому вы, вероятно, будете использовать то, что каждый исполняемый файл java был установлен совсем недавно.


0

На всякий случай, если вы используете файл .BAT в качестве службы Windows, я бы предложил удалить службу Windows и переустановить ее снова после изменения% JAVA_HOME%, чтобы указать на правильную версию Java.


0

После того, как я некоторое время боролся с этой проблемой и исследовал ее, мне, наконец, удалось решить ее, выполнив следующие действия:

1) установите jdk версии 12
2) Создайте новую переменную в системной переменной
3) Назовите ее как JAVA_HOME и укажите путь установки jdk
4) добавьте эту переменную в путь и переместите ее наверх.
5) перейдите в C: \ Program Files (86) \ Common Files \ Oracle \ Java \ javapath и замените java.exe и javaw.exe соответствующими файлами с такими же именами из папки pathtojavajdk / bin

Наконец, я проверил версию java по умолчанию в cmd с помощью «java -version», и она сработала!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.