-- Leo's gemini proxy

-- Connecting to republic.circumlunar.space:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

Using if:set, unless:set etc. to execute a task conditionally in Ant


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.


Ant

http://ant-contrib.sourceforge.net/tasks/tasks/if.html

ant-contrib


(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"
>


Using if:set, unless:set etc. with macrodefs in Ant


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.


Originally posted at 2013-09-13 14:41:31+00:00. Automatically generated from the original post : apologies for the errors introduced.


If And Unless

original post

-- Response ended

-- Page fetched on Sun May 19 06:32:07 2024