в чому причина існування змінної середовища JAVA_HOME?


92

Багато програм на основі Java вимагають встановити змінну env JAVA_HOME. Яка мета цієї змінної?


5
Ви можете прочитати тут
Сергій Ведерников

2
Я вважаю, що питання ще не має відповіді. Що стосується виконання самої Java, не потрібно мати цю змінну, якщо у вас є папка з двійковим файлом у шляху. Усі відповіді вказують на очевидне: "Де була встановлена ​​Java". Але чому: у чому сенс запуску програм Java?
Вовк

7
незважаючи на всі ці коментарі та відповіді, я не бачу фактичної причини встановлювати цю змінну середовища. Жодного обґрунтування. Я прийшов сюди, намагаючись встановити це за допомогою wsdl2java. Якщо я не використовував цей інструмент, не потрібно змінної env .... мабуть, просто деякі інструменти використовують цей var. але чому?
Thufir

@Thufir - Однак я ніде не бачив чітко вказаної причини . - JAVA_HOME - це просто умовність. Це не має жодного особливого значення, крім того, як усі погодились використовувати його AFAIK - єдине використання, яке я бачу, - це надання інструментам можливості розрізнити JRE, який зазвичай встановлюється у змінній PATH, та JDK. Зазвичай для JAVE_HOME встановлюється значення JDK. - Це явно. Немає справи з порядком каталогів, як у вас з PATH, де може бути кілька місць для пошуку Java exe.
Рохан

Відповіді:


22

Змінні середовища - це рядки, що містять таку інформацію, як диск, шлях або ім'я файлу.

У змінну JAVA_HOME вказує на каталог , де середовище виконання Java (JRE) , встановленої на вашому комп'ютері.


40
Одне виправлення: JAVA_HOME має вказувати на JDK, а не на JRE. Багато додатків не турбуються про різницю, але для деяких вона важлива.
Chris Nava

4
У JDK також є папка JRE. Отже, за допомогою JAVA_HOME програма може знаходити як JDK, так і JRE.
розбійник

@ChrisNava: Здається, вказівка ​​JAVA_HOME на інсталяцію JRE є дійсним у деяких випадках (я б здогадався в більшості випадків, що не стосуються розвитку): stackoverflow.com/questions/17601827/… . Тож говорити «треба» - це занадто багато.
cic

18

Мета - вказати, де встановлена ​​Java. $JAVA_HOME/bin/javaповинен виконати виконання Java.


4
Але це по-дурному, тому що java повинен знаходитись у шляху, і двійковий файл може знайти себе та відкрити інші файли, використовуючи відносний шлях.
LtWorf

3
Це корисно, коли java не на $ PATH, наприклад, коли у вас кілька інсталяцій SDK.
Хокон

Першим аргументом двійкового файлу є повне ім'я самого виконуваного файлу, Java не повинна знаходитись у шляху, щоб знайти власний каталог.
LtWorf

@Haakon Як хтось намагається встановити кілька JDK, чому б вам не хотіти Java на шляху? Як Windows виявляє java з java_home? Я думав, що шлях був більш-менш визначений як "список місць, які ОС шукатиме виконувані файли".
LastStar007

7

Коли ви запускаєте програму Java, вам потрібно спочатку запустити JVM, як правило, це робиться шляхом запуску виконуваного файлу, у Windows це java.exe . Ви можете отримати це різними способами, наприклад, просто вказавши повний шлях:

C:\somedir\bin\java.exe

або може мати його на вашому ШЛЯХІ.

В якості аргументів командного рядка ви вказуєте деякі файли класів або файли Jar, що містять файли класів, які є вашою програмою. Але цього недостатньо, сам java.exe потребує різних інших ресурсів, не в останню чергу всіх бібліотек Java. Встановивши змінну середовища JAVA_HOME, ви вказуєте, де слід знаходити JRE, а отже, і всі ці ресурси виконання. Ви повинні переконатися, що конкретна Java, яку ви виконуєте, відповідає налаштуванням JAVA_HOME.

Можливо, вам також доведеться помітити JAVA_HOME\binрано на своєму шляху, щоб якщо він java.exeпородив копію себе (наприклад, для компіляції JSP), він підібрав потрібну версію.


5

JAVA_HOMEє змінною середовища .

Він повинен бути налаштований на іншу операційну систему. Перевірте наступні посилання.

Також див. Тут для отримання додаткової інформації.


1
Ви взаємодієте environmentз pathрізними речами, але використовуваними в Windows точно так само, як і в Linux.
Валь

1
@val просто вказуючи, що з того часу було виправлено у його відповіді.
barlop

Просто додати до списку JAVA_HOME у Windows 10
filip_j

5

Згідно з @dirai, тут JAVA_HOMEвикористовується не сама Java, а деякі сторонні інструменти, наприклад, Apache Tomcat. Більшість програм, однак, працюватимуть без встановлення цієї змінної, але деякі можуть виявляти несподівану поведінку.


3

JAVA_HOMEдозволяє запускати будь-яку з декількох інсталяцій Java. Навіть якщо спочатку /usr/lib/jvm/java-1.8.0/bin/java у вас є PATH, корисно мати можливість сказати JAVA_HOME=/usr/lib/jvm/java-1.5.0і мати за замовчуванням "java", за допомогою якого ви запускаєте програми, замість цього використовує інший як налаштування середовища. Це дозволяє програмісту використовувати java, який їм потрібен, навіть якщо він не встановлений у звичайному системному розташуванні, а також перевірити або забезпечити зворотну сумісність із цією альтернативною версією. І це не вразливо для скидання в PATH іншою встановленою програмою, наприклад, основним оновленням версії для самої Java.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.