Ant在哪里设置'java.home'(并且它是错的)并且它应该附加'/ jre'吗?

ing*_*ere 13 java ant centos environment-variables

好的,我在CentOS 6.3上使用Ant版本1.7.1(默认安装):

[theuser@dev-ingyhere ~]$ ant -version
Apache Ant version 1.7.1 compiled on August 24 2010
[theuser@dev-ingyhere ~]$ cat /etc/*-release
CentOS release 6.3 (Final)
Run Code Online (Sandbox Code Playgroud)

我已经JAVA_HOME设置并运行ant:

[theuser@dev-ingyhere ~]$ export JAVA_HOME=/usr/java/jdk1.7.0_17 ; echo $JAVA_HOME ;
/usr/java/jdk1.7.0_17
[theuser@dev-ingyhere ~]$ ant -diagnostics | grep java\\.home
java.home : /usr/java/jdk1.7.0_17/jre
Run Code Online (Sandbox Code Playgroud)

这更有趣:

[theuser@dev-ingyhere ~]$ 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
[theuser@dev-ingyhere ~]$  env | grep JAVA
JAVA_HOME=/a/fools/folly 
Run Code Online (Sandbox Code Playgroud)

所以,我确实得到了一件事 - 显然Oracle的Java 7 Javadoc for Class System是错误的(骇然!),它将java.home系统属性描述为"Java安装目录".我知道,因为系统属性Java(TM)教程将系统属性描述java.home为"Java运行时环境(JRE)的安装目录".换句话说JAVA_HOME,环境java.home在JVM系统属性中不一定相同.(那是什么?!)

问题:在何处以及如何Ant获取/设置系统属性java.home

ing*_*ere 14

真的是一个JVM内部问题

由于Ant只是回显java.lang.System属性(请参阅上面原始帖子中的注释),这实际上是一个JVM问题.在的Java HotSpot虚拟机的核心解释.代码可在hg.openjdk.java.net在线获得.

在HotSpot(os_linux.cpp)的C++代码的第309行init_system_properties_values(),os类中有一个方法.它有一些温和的启发式方法可以嗅出一个名为变量的位置,该变量home_path最终被设置为Java用户所看到的"java.home".代码中的注释表明'<java_home>/jre'正式被指定为"java.home"的java.lang.System属性值(在JDK安装的情况下).