К "истинному" определению 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, который вы хотите использовать.