в чем причина существования переменной окружения JAVA_HOME?

94

Многие приложения на основе java требуют установки переменной env JAVA_HOME. Для чего нужна эта переменная?

user496949
источник
5
вы можете прочитать здесь
Сергей Ведерников
2
Я считаю, что на этот вопрос еще нет ответа. Что касается выполнения самой java, то эта переменная не обязательна, если у вас есть папка с двоичным файлом в пути. Все ответы указывают на очевидное: «Где была установлена ​​java». Но почему: в чем смысл запуска Java-приложений?
Wolf
7
несмотря на все эти комментарии и ответы, я не вижу реальной причины устанавливать эту переменную среды. Никакого обоснования. Я пришел сюда после попытки установить это с помощью wsdl2java. Если бы я не использовал этот инструмент, переменная env не нужна ... похоже, просто некоторые инструменты используют эту переменную. но почему?
Туфир,
@Thufir - однако я не видел явной причины, указанной где-либо. - JAVA_HOME - это просто соглашение. Это не имеет особого значения, кроме того, что все согласились использовать его. AFAIK. Единственное, что я вижу, это дает инструментам возможность различать JRE, который обычно устанавливается в переменной PATH, и JDK. Обычно JAVE_HOME установлен на JDK. - Это явно. Нет никакого отношения к порядку каталогов, как у вас с PATH, где может быть несколько мест для поиска java exe.
Rohan

Ответы:

22

Переменные среды - это строки, содержащие такую ​​информацию, как диск, путь или имя файла.

В переменную JAVA_HOME указывает на каталог , где среда выполнения Java (JRE) , установленной на вашем компьютере.

Камачи
источник
40
Одно исправление: JAVA_HOME должен указывать на JDK, а не на JRE. Многие приложения не заботятся о разнице, но для некоторых она значительна.
Крис Нава,
4
В JDK также есть папка JRE. Следовательно, с помощью JAVA_HOME приложение может найти JDK, а также JRE.
rogue lad
@ChrisNava: кажется, что указание JAVA_HOME на установку JRE допустимо в некоторых случаях (я бы предположил, что в большинстве случаев, не связанных с разработкой): stackoverflow.com/questions/17601827/… . Сказать «следует» - это слишком много.
cic
18

Цель состоит в том, чтобы указать, где установлена ​​Java. $JAVA_HOME/bin/javaдолжен выполнить среду выполнения Java.

Haakon
источник
4
Но это глупо, потому что java должна быть в пути, а двоичный файл может найти себя и открыть другие файлы, используя относительный путь.
LtWorf 01
3
Это полезно, когда java не находится в $ PATH, например, когда у вас несколько установок SDK.
Haakon
Первый аргумент двоичного файла - это полное имя самого исполняемого файла, java не обязательно должна быть в пути, чтобы найти свой собственный каталог.
LtWorf
@Haakon Как кто-то пытается настроить несколько JDK, почему бы вам не захотеть java на пути? Каким же образом Windows обнаруживает java из java_home? Я думал, что путь был более или менее определен как «список мест, где ОС будет искать исполняемые файлы».
LastStar007
7

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

C:\somedir\bin\java.exe

или может иметь его в вашем PATH.

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

Вам также может потребоваться заранее JAVA_HOME\binуказать путь, чтобы в случае java.exeпоявления копии самого себя (например, для компиляции JSP) он подобрал правильную версию.

джна
источник
6

Согласно @dirai, здесь JAVA_HOMEиспользуется не сама Java, а некоторые сторонние инструменты, такие как, например, Apache Tomcat. Однако большинство приложений будут работать без установки этой переменной, но некоторые могут показывать неожиданное поведение.

Карлсебаль
источник
5

JAVA_HOMEэто переменная среды .

Его нужно настроить в другой операционной системе. Ознакомьтесь со следующими ссылками.

Также см. Здесь для получения дополнительной информации.

сгохалес
источник
1
Вы путаетесь environmentс pathразными вещами, но они используются в Windows точно так же, как и в Linux.
Val
1
@val просто указывает, что с тех пор это было исправлено в его ответе.
barlop
Просто чтобы добавить в список JAVA_HOME в Windows 10
filip_j
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.

Нико Кадель-Гарсия
источник