На пути к «истинному» определению JAVA_HOME - PullRequest
11 голосов
/ 17 ноября 2011

Как Java-разработчик, который переключается между * системами NIX (OS X, Ubuntu, ...), хотя я всегда могу "запустить" мой JDK и запустить его, кажется, что во многих пакетах нет четкого определения JAVA_HOMEдля которого требуется установить JAVA_HOME:

Например,

  • MAVEN: "JAVA_HOME, относится к вашему каталогу JDK"
  • HADOOP: "JAVA_HOME, который указывает путь к установке Java 1.5.x "
  • SUN:" JAVA_HOME - это каталог, содержащий JRE "

У меня, таким образом, есть 2 вопроса относительноэтот вопрос (приветствуются любые идеи, но, конкретно, у меня есть два вопроса):

1) Копирует ли установка Mac OS X java цель из каталога "JavaVM.frameworks" вusr / bin?

2) Каково "определение" JAVA_HOME?Ясно, что мы не можем определить JAVA_HOME как просто «место, где установлена ​​Java», потому что это определение неоднозначно, поскольку Java может существовать как в местоположении HOME (то есть в / System / Library / Fraemworks / .....), так ив качестве альтернативы, он также может находиться непосредственно в каталоге / usr / bin?

МОИ МЫСЛИ

Я считаю, что JAVA_HOME на самом деле означает ссылку на нечто большее, чем просто двоичный файл"Java" программа.JAVA_HOME, вероятно, предназначен для ссылки на местоположение набора каталогов и двоичных файлов, связанных с Java ... Но, тем не менее, я не совсем понимаю, что это включает, и не слишком ли это определение, которое я предлагаю, достаточно точное, чтобы быть полезным.

Ответы [ 5 ]

14 голосов
/ 17 ноября 2011

Не существует «истинного» определения JAVA_HOME.Эта переменная не используется средой выполнения Java и не имеет спецификации как часть платформы Java.

Это просто соглашение, которое используется некоторыми приложениями, работающими поверх платформы Java.Поскольку стандарта нет, каждое приложение может самостоятельно устанавливать правила для каталога, к которому должна обращаться эта переменная;Вы должны прочитать документацию приложения, чтобы узнать, что ему нужно.

Тем не менее, каждое найденное мной приложение, использующее эту переменную, будет работать, если вы установите его в каталог верхнего уровня установки JDK (неJRE в JDK, но сам JDK).Этот каталог должен содержать подкаталоги bin и lib, которые содержат исполняемый файл java и библиотеки времени выполнения соответственно.

Некоторые приложения также будут работать, если вы указываете его на JRE, но если он нуждается в разработкедля таких инструментов, как javac, произойдет сбой.

Обычно я указываю JAVA_HOME в командной строке, когда запускаю инструмент, который ему нужен, потому что я работаю с несколькими версиями Java, например:

JAVA_HOME=/usr/local/jdk1.6.0_29 ant
2 голосов
/ 17 ноября 2011

Солнечное соглашение называет дом java корневым каталогом jre.Это должно быть более авторитетное определение.

Для таких инструментов разработки, как maven, они в основном заботятся о jdk dir.Они должны были назвать это "дом JDK".К сожалению, многие называют это также «домом java», отсюда и путаница.

Мы можем преодолеть путаницу, не используя «java home»;вместо этого скажите «jre home» или «jdk home» для ясности.

2 голосов
/ 17 ноября 2011

Я бы определил его следующим образом:

`JAVA_HOME\bin\java`

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

Исходный корень для поиска всех ваших SDK JRE files and jars.

1 голос
/ 17 ноября 2011

Я не знаю о том, что он установлен в разных системах, но JAVA_HOME должен быть установлен в корень установки Java. Так что, если он установлен на

C:\Program Files\Java\jdk1.6.0_25\

JAVA_HOME должно быть установлено на это.

Аналогично JDK_HOME, если вы видите это в письменном виде.

0 голосов
/ 17 ноября 2011

JAVA_HOME должен указывать на каталог установки той установки Java, которую вы хотите использовать.

...