<html> <head> <meta http-equiv="Content-Language" content="en-us"> <title>Subant Task</title> </head> <body bgcolor="#ffffff" text="#000000" link="#525D76" alink="#525D76" vlink="#525D76"> <table border="0" width="100%" cellspacing="4"> <!-- PAGE HEADER --> <tr> <td> <table border="0" width="100%"><tr> <td valign="bottom"> <font size="+3" face="arial,helvetica,sanserif"><strong>Subant Task</strong></font> <br><font face="arial,helvetica,sanserif">Calls a given target for all defined sub-builds.</font> </td> <td> <!-- PROJECT LOGO --> <a href="http://ant.apache.org/"> <img src="../../images/ant_logo_large.gif" align="right" alt="Apache Ant" border="0"/> </a> </td> </tr></table> </td> </tr> <!-- START RIGHT SIDE MAIN BODY --> <tr> <td valign="top" align="left"> <!-- Applying task/description --> <!-- Start Description --> <table border="0" cellspacing="0" cellpadding="2" width="100%"> <tr><td> </td></tr> <tr><td bgcolor="#525D76"> <font color="#ffffff" face="arial,helvetica.sanserif"> <a name="description"> <strong>Description</strong></a></font> </td></tr> <tr><td><blockquote> <p> Calls a given target for all defined sub-builds. This is an extension of ant for bulk project execution. <strong>This task must no be used outside of a <code>target</code> if it invokes the same build file it is part of.</strong> </p> <table border="0" cellspacing="0" cellpadding="2" width="100%"> <!-- Subsection heading --> <tr><td bgcolor="#828DA6"> <font color="#ffffff" face="arial,helvetica.sanserif"> <a name="Use with directories"> <strong>Use with directories</strong></a></font> </td></tr> <!-- Subsection body --> <tr><td> <p> subant can be used with directory sets to execute a build from different directories. 2 different options are offered : </p> <ul> <li> to run the same build file <code>/somepath/otherpath/mybuild.xml</code> with different base directories, use the genericantfile attribute </li> <li>if you want to run <code>directory1/mybuild.xml</code>, <code>directory2/mybuild.xml</code>, <code>....</code>, use the antfile attribute. The subant task does not set the base directory for you in this case, because you can specify it in each build file. </li> </ul> </td></tr> </table> </blockquote></td></tr> </table> <!-- End Description --> <!-- Ignore --> <!-- Start Attributes --> <table border="0" cellspacing="0" cellpadding="2" width="100%"> <tr><td> </td></tr> <tr><td bgcolor="#525D76"> <font color="#ffffff" face="arial,helvetica.sanserif"> <a name="attributes"> <strong>Parameters</strong></a></font> </td></tr> <tr><td><blockquote> <table> <tr> <td bgcolor="#cccccc" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif"><b>Attribute</b></font> </td> <td bgcolor="#cccccc" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif"><b>Description</b></font> </td> <td bgcolor="#cccccc" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif"><b>Type</b></font> </td> <td bgcolor="#cccccc" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif"><b>Requirement</b></font> </td> </tr> <!-- Attribute Group --> <!-- Attribute Group --> <!-- Attribute --> <tr> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">antfile</font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">Build file name, to use in conjunction with directories.<br/> Defaults to "build.xml".<br/> If <code>genericantfile</code> is set, this attribute is ignored.</font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">String</font> </td> <td bgcolor="#eeeeee" valign="top" align="left" rowspan="10"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">Optional</font> </td> </tr> <!-- Attribute --> <tr> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">buildpath</font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">Set the buildpath to be used to find sub-projects.</font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">Path</font> </td> </tr> <!-- Attribute --> <tr> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">buildpathref</font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">Buildpath to use, by reference.</font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">Reference</font> </td> </tr> <!-- Attribute --> <tr> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">failonerror</font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">Sets whether to fail with a build exception on error, or go on.</font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">boolean</font> </td> </tr> <!-- Attribute --> <tr> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">genericantfile</font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">Build file path, to use in conjunction with directories.<br/> Use <code>genericantfile</code>, in order to run the same build file with different basedirs.<br/> If this attribute is set, <code>antfile</code> is ignored.</font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">File</font> </td> </tr> <!-- Attribute --> <tr> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">inheritall</font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">Corresponds to <code><ant></code>'s <code>inheritall</code> attribute.</font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">boolean</font> </td> </tr> <!-- Attribute --> <tr> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">inheritrefs</font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">Corresponds to <code><ant></code>'s <code>inheritrefs</code> attribute.</font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">boolean</font> </td> </tr> <!-- Attribute --> <tr> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">output</font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">Corresponds to <code><ant></code>'s <code>output</code> attribute.</font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">String</font> </td> </tr> <!-- Attribute --> <tr> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">target</font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif"></font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">String</font> </td> </tr> <!-- Attribute --> <tr> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">verbose</font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif"> Enable/ disable log messages showing when each sub-build path is entered/ exited. The default value is false.</font> </td> <td bgcolor="#eeeeee" valign="top" align="left"> <font color="#000000" size="-1" face="arial,helvetica,sanserif">boolean</font> </td> </tr> </table> </blockquote></td></tr> </table> <!-- End Attributes --> <!-- Start Elements --> <table border="0" cellspacing="0" cellpadding="2" width="100%"> <tr><td> </td></tr> <tr><td bgcolor="#525D76"> <font color="#ffffff" face="arial,helvetica.sanserif"> <a name="elements"> <strong>Parameters as nested elements</strong></a></font> </td></tr> <tr><td><blockquote> <!-- Start Element --> <table border="0" cellspacing="0" cellpadding="2" width="100%"> <tr><td> </td></tr> <tr><td bgcolor="#828DA6"> <font color="#ffffff" face="arial,helvetica.sanserif" size="-1"> <strong>dirset</strong> (org.apache.tools.ant.types.DirSet)</font> </td></tr> <tr><td><blockquote> Adds a directory set to the implicit build path. <p> <em>Note that the directories will be added to the build path in no particular order, so if order is significant, one should use a file list instead!</em> <!-- Ignore --> <!-- Ignore --> </blockquote></td></tr> </table> <!-- End Element --> <!-- Start Element --> <table border="0" cellspacing="0" cellpadding="2" width="100%"> <tr><td> </td></tr> <tr><td bgcolor="#828DA6"> <font color="#ffffff" face="arial,helvetica.sanserif" size="-1"> <strong>filelist</strong> (org.apache.tools.ant.types.FileList)</font> </td></tr> <tr><td><blockquote> Adds an ordered file list to the implicit build path. <p> <em>Note that contrary to file and directory sets, file lists can reference non-existent files or directories!</em> <!-- Ignore --> <!-- Ignore --> </blockquote></td></tr> </table> <!-- End Element --> <!-- Start Element --> <table border="0" cellspacing="0" cellpadding="2" width="100%"> <tr><td> </td></tr> <tr><td bgcolor="#828DA6"> <font color="#ffffff" face="arial,helvetica.sanserif" size="-1"> <strong>fileset</strong> (org.apache.tools.ant.types.FileSet)</font> </td></tr> <tr><td><blockquote> Adds a file set to the implicit build path. <p> <em>Note that the directories will be added to the build path in no particular order, so if order is significant, one should use a file list instead!</em> <!-- Ignore --> <!-- Ignore --> </blockquote></td></tr> </table> <!-- End Element --> <!-- Start Element --> <table border="0" cellspacing="0" cellpadding="2" width="100%"> <tr><td> </td></tr> <tr><td bgcolor="#828DA6"> <font color="#ffffff" face="arial,helvetica.sanserif" size="-1"> <strong>property</strong> (org.apache.tools.ant.taskdefs.Property)</font> </td></tr> <tr><td><blockquote> Corresponds to <code><ant></code>'s nested <code><property></code> element. <!-- Ignore --> <!-- Ignore --> </blockquote></td></tr> </table> <!-- End Element --> <!-- Start Element --> <table border="0" cellspacing="0" cellpadding="2" width="100%"> <tr><td> </td></tr> <tr><td bgcolor="#828DA6"> <font color="#ffffff" face="arial,helvetica.sanserif" size="-1"> <strong>propertyset</strong> (org.apache.tools.ant.types.PropertySet)</font> </td></tr> <tr><td><blockquote> Corresponds to <code><ant></code>'s nested <code><propertyset></code> element. <!-- Ignore --> <!-- Ignore --> </blockquote></td></tr> </table> <!-- End Element --> <!-- Start Element --> <table border="0" cellspacing="0" cellpadding="2" width="100%"> <tr><td> </td></tr> <tr><td bgcolor="#828DA6"> <font color="#ffffff" face="arial,helvetica.sanserif" size="-1"> <strong>buildpath</strong> (org.apache.tools.ant.types.Path)</font> </td></tr> <tr><td><blockquote> Creates a nested build path, and add it to the implicit build path. <!-- Ignore --> <!-- Ignore --> </blockquote></td></tr> </table> <!-- End Element --> <!-- Start Element --> <table border="0" cellspacing="0" cellpadding="2" width="100%"> <tr><td> </td></tr> <tr><td bgcolor="#828DA6"> <font color="#ffffff" face="arial,helvetica.sanserif" size="-1"> <strong>buildpathelement</strong> (org.apache.tools.ant.types.Path.PathElement)</font> </td></tr> <tr><td><blockquote> Creates a nested <code><buildpathelement></code>, and add it to the implicit build path. <!-- Ignore --> <!-- Ignore --> </blockquote></td></tr> </table> <!-- End Element --> </blockquote></td></tr> </table> <!-- End Elements --> <table border="0" cellspacing="0" cellpadding="2" width="100%"> <tr><td> </td></tr> <tr><td bgcolor="#525D76"> <font color="#ffffff" face="arial,helvetica.sanserif"> <a name="examples"> <strong>Examples</strong></a></font> </td></tr> <tr><td><blockquote> <pre> <project name="subant" default="subant1"> <property name="build.dir" value="subant.build"/> <target name="subant1"> <subant target=""> <property name="build.dir" value="subant1.build"/> <property name="not.overloaded" value="not.overloaded"/> <fileset dir="." includes="*/build.xml"/> </subant> </target> </project> </pre> <p> this snippet build file will run ant in each subdirectory of the project directory, where a file called build.xml can be found. The property build.dir will have the value subant1.build in the ant projects called by subant. </p> <pre> <subant target=""> <propertyset> <propertyref prefix="toplevel"/> <mapper type="glob" from="foo*" to="bar*"/> </propertyset> <fileset dir="." includes="*/build.xml"/> </subant> </pre> <p> this snippet build file will run ant in each subdirectory of the project directory, where a file called build.xml can be found. All properties whose name starts with "foo" are passed, their names are changed to start with "bar" instead </p> <pre> <subant target="compile" genericantfile="/opt/project/build1.xml"> <dirset dir="." includes="projects*"/> </subant> </pre> <p> assuming the subdirs of the project dir are called projects1, projects2, projects3 this snippet will execute the compile target of /opt/project/build1.xml, setting the basedir to projects1, projects2, projects3 </p> <!-- manually written --> <p>Now a little more complex - but useful - scenario. Assume that we have a directory structure like this:</p> <pre> root | common.xml | build.xml | +-- modules +-- modA | +-- src +-- modB +-- src <u><b>common.xml:</b></u><br> <project> <property name="src.dir" value="src"/> <property name="build.dir" value="build"/> <property name="classes.dir" value="${build.dir}/classes"/> <target name="compile"> <mkdir dir="${classes.dir}"/> <javac srcdir="${src.dir}" destdir="${classes.dir}"/> </target> <!-- more targets --> </project> <u><b>build.xml:</b></u><br> <project> <macrodef name="iterate"> <attribute name="target"/> <sequential> <subant target="@{target}"> <fileset dir="modules" includes="*/build.xml"/> </subant> </sequential> </macrodef> <target name="compile"> <iterate target="compile"/> </target> <!-- more targets --> </project> <u><b>modules/modA/build.xml:</b></u><br> <project name="modA"> <import file="../../common.xml"/> </project> </pre> <p>This results in very small buildfiles in the modules, maintainable buildfile (common.xml) and a clear project structure. Additionally the root buildfile is capable to run the whole build over all modules. </p> <!-- manually written --> </blockquote></td></tr> </table> </td> </tr> <!-- END RIGHT SIDE MAIN BODY --> <!-- FOOTER SEPARATOR --> <tr> <td> <hr noshade="" size="1"/> </td> </tr> <!-- PAGE FOOTER --> <tr> <td> <div align="center"><font color="#525D76" size="-1"><em> Copyright © 2000-2005, The Apache Software Foundation. All Rights Reserved. </em></font></div> </td> </tr> </table> </body> </html>