Sometimes you may need to take different actions during your Java application build process, depending on if an environment variable is set. A scenario that I came across is that if a particular environment variable was set, then files needed to be copied from one location, otherwise from another.
Apache Ant is not meant to be a programming language so it is often difficult to accomplish tasks like this. However, I found a way to do this by creating two sub-targets for each boolean value of a conditional. Each target is conditionally executed by using
unless attributes which check the property if the environment variable
VARIABLE was set.
<property environment="env"/> <condition property="exists.envVar"> <isset property="env.VARIABLE"/> </condition> <target name="task" depends="-task-true, -task-false"/> <target name="-task-true" if="exists.envVar"> <echo>Execute something here</echo> </target> <target name="-task-false" unless="exists.envVar"> <echo>Or execute this instead</echo> </target>
The sub-targets are prepended with the
- character and are also missing documentation attribute. Both of these things makes it so that they cannot be executed from the command line, and encourages the use of the top-level
task target. The user calls the main target (
task in this example), and the logic does the rest.