Подтвердить что ты не робот

Где 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?

4b9b3361

Ответ 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.