К "истинному" определению JAVA_HOME

Как разработчик 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?

MY THUUGHTS

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

Ответ 1

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

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

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

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

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

JAVA_HOME=/usr/local/jdk1.6.0_29 ant

Ответ 2

Я бы определил его как путь такой:

`JAVA_HOME\bin\java`

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

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

Ответ 3

Соглашение Sun относится к java home как директория jre root. Это должно быть более авторитетное определение.

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

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

Ответ 4

Я не знаю, что он настроен для разных систем, но JAVA_HOME должен быть установлен в корень java-установки. Поэтому, если вы установили его на

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

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

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

Ответ 5

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