Windows ігнорує JAVA_HOME: як встановити JDK за замовчуванням?


89

Як переконати Windows використовувати JDK замість JRE?

Це питання задавали раніше, тут і в інших місцях:

Як встановити установку / час виконання Java за замовчуванням (Windows)?

Проблема полягає в тому, що Windows ігнорує, JAVA_HOMEа також ігнорує той факт, що я зробив каталог JDK bin першим записом у шляху.

Коли я запускаю 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
OP тут. Дивіться мою редакцію вище. Так, це вирішило. Дві нотатки: по-перше, схоже, інсталятор Java дійсно помістив java.exe у Windows \ System32. Це мене вражає. По-друге, коли ви змінюєте шлях у розділі Комп’ютер / Властивості / Додаткові налаштування системи / Змінні середовища, вам потрібно змінити системний шлях, а не шлях користувача . Системний шлях ставить себе на перше місце.
ccleve

2
Я також підкреслюю пункт user237815 про те, що, здається, інсталятор Java насправді скидає свій файл java.exe у Windows \ System32. Це, звичайно, не було для мене інтуїтивно зрозумілим. Тільки перевіривши "java -version" з консолі, я отримав будь-який рівень комфорту, який Windows використовував зараз, я бажав від своєї інсталяції 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 і працюю зі мною.
Вендель,

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 у шляху ніяк не працювало для мене, це насправді це вирішило.
Guilherme Orioli

12

Windows нічого не ігнорує. Це проблема з вашим налаштуванням; Windows просто використовує те, що ви надаєте. Вона не має спеціальних знань про JAVA_HOME.

CLASSPATHтакож не має нічого спільного з Windows. Для Windows це лише змінна середовища, яка розширюється до розташування папки.

Перевірте свою %PATH%екологічну змінну. Саме це змушує Windows знаходити одну перед іншою. Шлях (як зазначив пост, до якого ви посилалися) повинен вказувати %JAVA_HOME%\bin;<remainder of path>. Знову ж таки, публікація, на яку ви зв’язали, дала вам спосіб встановити це за допомогою командного файлу.

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


@erickson: Добре. Дякую - виправлю. Однак досі це не має нічого спільного з Windows, що було суттю моєї відповіді. :)
Ken White

Зрозуміло, я просто був стурбований тим, що можна створити нову помилкову думку; Java не знає нічого більше про JAVA_HOMEWindows.
erickson

Я ціную виправлення. Я сам не людина Java (обмежений досвід на сьогодні), тому це добре знати для подальшого використання.
Ken White

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.6 використовувалася Java 1.7, хоча я вказав у шляху використання 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.exeOracle.

Я видалив цей текст із Шляху там, де мій Шлях уже є %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 у моєму вікні підказки cmd відображає Java 8.
Доданий шлях до каталогу бін 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 також розміщує копії деяких з цих виконуваних файлів у вашому каталозі windows system32, так що ви, швидше за все, будете використовувати кожен із виконуваних файлів 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.