Где Ant установить свой "java.home" (и это неправильно), и предполагается ли он добавить "/jre"?
Хорошо, я использую Ant версию 1.7.1 (установка по умолчанию) в CentOS 6.3:
[[email protected] ~]$ ant -version
Apache Ant version 1.7.1 compiled on August 24 2010
[[email protected] ~]$ cat /etc/*-release
CentOS release 6.3 (Final)
У меня есть JAVA_HOME
set и я запускаю ant
:
[[email protected] ~]$ export JAVA_HOME=/usr/java/jdk1.7.0_17 ; echo $JAVA_HOME ;
/usr/java/jdk1.7.0_17
[[email protected] ~]$ ant -diagnostics | grep java\\.home
java.home : /usr/java/jdk1.7.0_17/jre
Это еще веселее:
[[email protected] ~]$ export JAVA_HOME=/a/fools/folly ; echo $JAVA_HOME ; ant -diagnostics | grep java\\.home
/a/fools/folly
java.home : /usr/java/jdk1.7.0_17/jre
[[email protected] ~]$ env | grep JAVA
JAVA_HOME=/a/fools/folly
Итак, у меня есть одно - видимо Oracle Java 7 Javadoc для системы классов НЕПРАВИЛЬНО (aghast!), где он описывает java.home
Системное свойство как "каталог установки Java". Я знаю, что, поскольку Учебники Java (TM) для системных свойств описывает java.home
Системное свойство как "Каталог установки для Java Runtime Environment (JRE) )". Другими словами, JAVA_HOME
в среде не обязательно равен java.home
в свойствах JVM System. (Что устанавливает это?!)
ВОПРОС: Где и как ant
получить/установить системное свойство java.home
?
Ответы
Ответ 1
Действительно, внутренний вопрос JVM
Так как Ant просто отражает свойства java.lang.System(см. комментарий выше в оригинальном сообщении), это действительно вопрос JVM. Java HotSpot Virtual Machine является основным интерпретатором. Код доступен в Интернете по адресу hg.openjdk.java.net.
В строке 309 кода С++ для HotSpot (os_linux.cpp) существует метод init_system_properties_values()
в классе os
. Он делает некоторые мягкие эвристики, чтобы вынюхивать местоположение переменной с именем home_path
, которая в конечном итоге устанавливается на то, что пользователи Java видят как "java.home". Комментарии в коде указывают, что '<java_home > /jre' формально определяется как значение свойства java.lang.System для "java.home" (в случае установки JDK).
Ответ 2
У меня был JDK, установленный в окне Windows в d:\jdk, но при запуске его d:\jdk\bin\java.exe с -XshowSettings был показан его встроенный java.home, указывающий на общесистемную установку JRE в c:\Program Files\Java\jre1.8.0_91. Я подозреваю, что я испортил свою установку, удалив d:\jdk\jre, не понимая роли частного JRE и открытого JRE.