2013-07-10 65 views
10

在我的build.xml文件,我有这行:

<property environment="env"/> 
<echo message="JAVA_HOME is set to = ${env.JAVA_HOME}" /> 

在某些机器上,这将打印

"JAVA_HOME is set to = /usr/jdk1.6" 

但在其他一些,它会打印此

"JAVA_HOME is set to = ${env.JAVA_HOME}" 

有谁知道什么可能会导致此?

感谢

回答

9

的消息告诉你,蚂蚁是不是能够解决财产env.JAVA_HOME;这意味着环境变量JAVA_HOME未在该机器中设置。

+0

如果未设置JAVA_HOME,那么怎么可能为项目建成? (这是一个Java项目) –

+0

蚂蚁并不需要设置'JAVA_HOME'(正如你可能已经想通了,因为你能够执行,即使在一些机器上'JAVA_HOME'没有设置你的构建文件) –

+0

确定这现在是有道理的。谢谢 –

6

通常您可以在系统上找到您的系统(如果您是Unix系统),通过执​​行which anttype ant实际的ant命令。如果您查看该位置,您通常会看到它是链接到$ANT_HOME目录下的实际ant命令。

看看这个脚本。其中很大一部分只是试图确定$ANT_HOME$JAVA_HOME的确切位置,如果它们在环境中未被默认设置。

你不要在ant shell脚本看到的是:

EXPORT JAVA_HOME 

因此,即使$JAVA_HOME被设置ant脚本里面,它从未出口到环境中(除非有人已经修改了ant shell脚本. If an environment variable is not exported, it is unavailable to child processes -- like the的java child process running your ant`过程。

因此,如果你身在何处$JAVA_HOMEant之前执行未设置一台机器上,它不会在你的构建脚本可用。

然而,无论是蚂蚁和Java(因为Ant是一个Java进程)的设置,你可以使用默认属性的整体转换。当Ant执行时,它设置为own built in properties,其中包括诸如${ant.home}之类的内容。而且,当执行Java时,Java也会建立一个完整的列表Java Properties,如${java.home}

因此,如果您确实需要知道您的JAVA_HOME目录所在的位置,请使用属性${java.home}而不依赖于环境变量$JAVA_HOME

如果你想获得这些属性的列表,运行以下Ant构建文件:

<project> 
    <echoproperties/> 
</project> 
+0

这应该被标记为正确答案..因为它包含OP正在寻找的答案... – Victor

+2

好吧,这是错误的。 '$ {java.home}'当然不会告诉JAVA_HOME在哪里,只有环境变量会说明这一点。 '$ {爪哇。home}'会告诉JRE在执行过程中使用的是哪一个,这是另一回事。 – eis