15

在我的 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}"

有谁知道这可能是什么原因?

谢谢

4

2 回答 2

11

该消息告诉您 Ant 无法解析该属性env.JAVA_HOME;这意味着该JAVA_HOME机器中未设置环境变量。

于 2013-07-10T13:16:31.430 回答
8

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

看看这个脚本。如果在环境中没有默认设置这些,其中大部分只是试图确定准确的位置$ANT_HOME和位置。$JAVA_HOME

您在antshell 脚本中看不到的是:

 EXPORT JAVA_HOME

因此,即使$JAVA_HOMEant脚本中设置,它也永远不会导出到环境中(除非有人修改了antshell 脚本. If an environment variable is not exported, it is unavailable to child processes -- like thejava child process running yourant` 进程。

因此,如果您在执行$JAVA_HOME之前未设置的机器上ant,它将在您的构建脚本中不可用。

但是,Ant 和 Java(因为 Ant 是一个 Java 进程)都设置了一系列您可以使用的默认属性。当 Ant 执行时,它会设置它自己的内置属性,其中包括${ant.home}. 而且,在执行 Java 时,Java 还会设置一个完整的Java 属性列表,例如${java.home}.

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

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

<project>
    <echoproperties/>
</project>
于 2013-07-10T14:05:45.767 回答