Ant在哪里设置’java.home’(并且它是错的)并且它应该附加’/ jre’吗?
好的,我在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)
我有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
这更有趣:
[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
所以,我确实得到了一件事 – 显然Oracle的Java 7 Javadoc for Class System是错误的(骇然!),它将java.home
系统属性描述为“Java安装目录”。 我知道因为Java(TM)系统属性教程将java.home
系统属性描述为“Java运行时环境(JRE)的安装目录”。 换句话说,环境中的JAVA_HOME
不一定等于JVM系统属性中的java.home
。 (那是什么?!)
问题: Ant
在何处以及如何获取/设置系统属性java.home
?
真的是一个JVM内部问题
由于Ant只是回显java.lang.System属性(请参阅上面原始post中的注释),这实际上是一个JVM问题。 Java HotSpot虚拟机是核心解释器。 代码可在hg.openjdk.java.net在线获得 。
在HotSpot(os_linux.cpp)的C ++代码的第309行 , os
类中有一个init_system_properties_values()
方法。 它做了一些温和的启发式方法来嗅出名为home_path
的变量的位置,该变量最终被设置为Java用户所看到的“java.home”。 代码中的注释表明’
我在d:\ jdk的Windows机器上安装了JDK,但运行带有-XshowSettings的d:\ jdk \ bin \ java.exe显示其内置的java.home指向c:\中的系统级JRE安装Program Files \ Java \ jre1.8.0_91。 我怀疑我通过删除d:\ jdk \ jre而损坏了我的安装,而没有理解私有JRE与公共JRE的角色。