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

2022-01-13 00:00:00 environment-variables centos ant java

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

Okay, I'm using Ant version 1.7.1 (default install) on CentOS 6.3:

[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:

I have JAVA_HOME set and I run 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.(什么设置?!)

So, I do get one thing -- apparently Oracle's Java 7 Javadoc for Class System is WRONG (aghast!) where it describes the java.home System Property as the "Java installation directory." I know that because the Java(TM) Tutorials for System Properties describes the java.home System Property as the "Installation directory for Java Runtime Environment (JRE)." In other words the JAVA_HOME in the environment does not necessarily equal java.home in the JVM System Properties. (What sets that?!)

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

QUESTION: Where and how does Ant get/set the system property java.home?

推荐答案

真是一个JVM内部问题

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

Since Ant is just echoing the java.lang.System properties (see comment above under original post), this is really a JVM question. The Java HotSpot Virtual Machine is the core interpreter. Code is available online at hg.openjdk.java.net.

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

On line 309 of the C++ code for HotSpot (os_linux.cpp) there is a an init_system_properties_values() method in the os class. It does some mild heuristics to kind of sniff out the location for a variable named home_path which ends up being set to what Java users see as "java.home". Comments in the code indicate that '<java_home>/jre' is being formally specified as the java.lang.System property value for "java.home" (in the case of a JDK install).

相关文章