But where does it stop? <subant> also supports automatic ordering of the
projects called based on the declared dependencies of the projects in an XML
file... Should that go into <ant> as well? (granted, I didn't submit that,
it's only in my sandbox...)

According to your reasoning, <loadproperties> features should have gone into
<property file="">.

And what about running several targets instead of one, or forking the
sub-builds, or exporting back up properties/references from the child to the
parent? Should that go in <ant> as well?

This is why <subant> and orther <ant> derivatives exist, and do a good job
at what they do.

Have you considered the subtleties of what basedir gets used for the
sub-projects when mixing build filesets and dirsets?

Instead of modifying Ant to get your chances, you might as well have used
something that already exists and works. But that's just me. --DD

-----Original Message-----
From: Andrew Goodnough [mailto:[EMAIL PROTECTED] 
Sent: Thursday, March 13, 2003 9:27 AM
To: [EMAIL PROTECTED]
Subject: [PATCH] Ant Task - Proposed Enhancement

The current ant task runs an ant process for a specified build file in a
specified directory.  I wanted to be able to give it more than one
directory, and execute the build file found in each directory specified,
or give it a set of build files to execute.  This can be really useful
for building projects on which this project depends (could be
sub-projects but doesn't have to be).  I understand that this
enhancement overlaps with the proposed SubAnt task but I feel that this
function is really the domain of the existing Ant task, so rather than
adding another task, the Ant task should be enhanced - especially when
it only involves adding a couple contained types that users already know
how to use in other contexts.

This enhancement adds the ability to specify multiple directories with
the addition of a contained <dirset> type or multiple files with the
addition of a contained <fileset> type.  One can also specify both
DirSets and FileSets together, as well.  This allows the task to run ant
processes on the directories specified (by appending the default
"antFile" to them), or on the set of files specified.  {see
ANT_HOME\src\etc\testcases\taskdefs\ant.xml for examples in the attached
zip file}

I've run all of the current and new tests on the task and all passed. 
Most of the original logic flow is unchanged  (although it doesn't seem
that way due to refactoring).  In a nutshell, I added a for loop to the
execute method to loop through the each directory and each file
specifed, and execute the target on each. {see "diff.txt" in the
attached zip file}

Tell me what you think.

Andy



Using directory structure
*************************
/sub1
  build.xml
/sub2
  build.xml
/sub3
  build.xml


A typical build file could use the new task like this:

  <!-- excerpt from Project3/build.xml which depends on Project1 and
Project2 -->
  <!-- in order to build correctly -->
  <property name="subproject.dirs" value="Project1,Project2"/>

  <target name="compile-subprojects" if="subproject.dirs">
    <taskdef name="antnew"
classname="org.apache.tools.ant.taskdefs.AntNew"/>
    <antnew inheritAll="false" target="compile">
      <dirset dir=".." includes="${subproject.dirs}"/>     <!-- NEW
FEATURE -->
    </antnew>
  </target>

  <target name="compile" depends="compile-subprojects">
        ...
  </target>


more examples pasted from testcases:

  <target name="test-dirset-inline-includes">
    <ant inheritAll="false" target="printMessage">
      <dirset dir="ant" includes="sub1,sub2,sub3"/>
    </ant>
  </target>

  <target name="test-dirset-contained-includes">
    <ant inheritAll="false" target="printMessage">
      <dirset dir="ant">
        <include name="sub*"/>
      </dirset>
    </ant>
  </target>

  <target name="test-fileset-inline-includes">
    <ant inheritAll="false" target="printMessage">
      <fileset dir="ant"
includes="sub1/build.xml,sub2/build.xml,sub3/build.xml"/>
    </ant>
  </target>

  <target name="test-fileset-contained-includes">
    <ant inheritAll="false" target="printMessage">
      <fileset dir="ant">
        <include name="sub*/build.xml"/>
      </fileset>
    </ant>
  </target>

  <target name="test-fileset-and-dirset">
    <ant inheritAll="false" target="printMessage">
      <fileset dir="ant">
        <include name="sub1/build.xml"/>
      </fileset>
      <dirset dir="ant" includes="sub2,sub3"/>
    </ant>
  </target>

Reply via email to