Using Environment Variables

Problem

You want to obtain and use environment variables within Ant. This is a way to avoid hardcoding values in buildfiles.

Solution

Use a special form of the <property> task:[15]

<?xml version="1.0"?>
<project name="envSample" default="deploy" basedir=".">
  <!-- Set up the 'env' prefix for environment variables -->
               <property environment="env"/>

  <!-- Abort the build if TOMCAT_HOME is not set -->
  <target name="checkTomcatHome" unless="env.TOMCAT_HOME">
    <fail message="TOMCAT_HOME must be set!"/>
  </target>

  <target name="compile">
    ... compile the code
  </target>

  <!-- Deploy the WAR file to TOMCAT_HOME/webapps -->
  <target name="deploy" depends="checkTomcatHome,compile">
               <echo>Deploying to ${env.TOMCAT_HOME}</echo>
               <copy file="myapp.war" todir="${env.TOMCAT_HOME}/webapps"/>
               </target>

</project>

Discussion

Although most operating systems support the concept of environment variables, not all do. As a result, Sun deprecated Java’s System.getEnv( ) method, which used to return the values of environment variables. Undeterred by this restriction, Ant’s programmers added the ability to obtain environment variables using the technique shown here.

Use the property task’s environment attribute to define a prefix, conventionally “env”. Then use this prefix when referencing environment variables in other parts of a buildfile, as if you are referencing any normal Ant property. Our example Ant buildfile uses the TOMCAT_HOME environment variable to deploy a Web Application ...

Get Java Extreme Programming Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.