I’m not sure anyone except me is still struggling on with using Ant, but just in case, here is a nice thing.
In Ant 1.9.1 they added a useful feature: instead of needing to use the <if> tag and similar from ant-contrib, you can conditionally execute “any” task.
(In fact, this appears to mean “any task except a macrodef” – see my post Using if:set, unless:set etc. with macrodefs in Ant.)
You need to add these namespaces at the top of your project:
<project
xmlns:if="ant:if"
xmlns:unless="ant:unless"
>
and then make any task conditional by adding one of these attributes:
if:set
if:true
if:blank
unless:set
unless:true
unless:blank
if:set and unless:set take a property name and run the task if it is set at all (or unless it is set at all).
<mytask if:set="property.name" other_attrs="" .../>
Where mytask is the name of any ordinary Ant task like echo, jar etc.
(Note there is no ${} around the property name for if:set.)
if:true and unless:true take a value and run the task if it is true (or unless it is true), so they need to be used like this:
<mytask if:true="${property}" other_attrs="" .../>
(Note the ${} here, but not above.)
Similarly, if:blank and unless:blank take a value and run the task if it is blank (or unless it is blank), e.g.:
<mytask if:blank="${property}" other_attrs="" .../>
NOTE: The example in the documentation is wrong (at this time, 2013-09-13) – it uses the property name, but this does not work – you must surround it with ${} to get its value.
The properties can be specified in your build file as normal, or supplied on the command line to ant with -Dproperty.name=value.
Here’s an example of using set:
build.xml:
<project
xmlns:if="ant:if"
xmlns:unless="ant:unless"
default="build"
>
<property name="setinxml" value="true"/>
<target name="build">
<echo if:set="setinxml" message="if:set=setinxml"/>
<echo unless:set="setinxml" message="unless:set=setinxml"/>
<echo if:set="notset" message="if:set=notset"/>
<echo unless:set="notset" message="unless:set=notset"/>
<echo if:set="setincmd" message="if:set=setincmd"/>
<echo unless:set="setincmd" message="unless:set=setincmd"/>
</target>
</project>
And here’s the output:
$ ant -version
Apache Ant(TM) version 1.9.2 compiled on July 8 2013
$ ant -Dsetincmd=true
Buildfile: build.xml
build:
[echo] if:set=setinxml
[echo] unless:set=notset
[echo] if:set=setincmd
BUILD SUCCESSFUL
Total time: 0 seconds
The documentation for this, such as it is, is here: If And Unless.