In my build.xml file, I have these lines:
<property environment="env"/>
<echo message="JAVA_HOME is set to = ${env.JAVA_HOME}" />
On some machine, this would print
"JAVA_HOME is set to = /usr/jdk1.6"
But on some others, it would print this
"JAVA_HOME is set to = ${env.JAVA_HOME}"
Does anyone know what might cause this?
Thanks
You can usually find on your system (if you're Unix) where the actual
ant
command lives by doing eitherwhich ant
ortype ant
. If you look at that location, you will usually see that it's a link to the actualant
command under the$ANT_HOME
directory.Take a look at this script. Much of it is just trying to determine exactly where
$ANT_HOME
and$JAVA_HOME
reside if these are not set by default in the environment.What you don't see in the
ant
shell script is:So, even though
$JAVA_HOME
is set inside theant
script, it is never exported into the environment (unless someone has modified theant
shell script. If an environment variable is not exported, it is unavailable to child processes -- like the
javachild process running your
ant` process.Thus, if you are on a machine where
$JAVA_HOME
isn't set beforeant
is executed, it won't be available in your build script.However, both Ant and Java (because Ant is a Java process) setup a whole slew of default properties that you can use. When Ant executes it sets it's own built in properties that include things like
${ant.home}
. And, when Java is executed, Java also sets up a complete list of Java Properties like${java.home}
.So, if you really need to know where your JAVA_HOME directory is located, use the property
${java.home}
and not depend upon the environment variable$JAVA_HOME
.If you'd like to get a list of these properties, run the following Ant build file:
The message tells you that Ant was not able to resolve the property
env.JAVA_HOME
; this means that the environment variableJAVA_HOME
was not set in that machine.