<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>
        
            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.
        
          <subant target="">
             <propertyset>
                  <propertyref prefix="toplevel"/>
                  <mapper type="glob" from="foo*" to="bar*"/>
             </propertyset>
             <fileset dir="." includes="*/build.xml"/>
          </subant>
        
            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
        
          <subant target="compile" genericantfile="/opt/project/build1.xml">
             <dirset dir="." includes="projects*"/>
          </subant>
        
            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
        
        
        Now a little more complex - but useful - scenario. Assume that we have
        a directory structure like this:
        
        root
          |  common.xml
          |  build.xml
          |
          +-- modules
                +-- modA
                |     +-- src
                +-- modB
                      +-- src
        common.xml:
        <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>
        build.xml:
        <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>
        modules/modA/build.xml:
        <project name="modA">
            <import file="../../common.xml"/>
        </project>
        
        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.