ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dona...@apache.org
Subject cvs commit: jakarta-ant-myrmidon/site/src/xdocs/stylesheets docs.vsl project.xml templates.vm
Date Wed, 10 Apr 2002 23:43:47 GMT
donaldp     02/04/10 16:43:47

  Added:       site     .cvsignore build.xml
               site/docs ant1compat.html buildfile.html classloader.html
                        configuring.html differences.html getinvolved.html
                        index.html librarys.html task.html todo.html
                        user.html vfs.html
               site/src/xdocs ant1compat.xml buildfile.xml classloader.xml
                        configuring.xml differences.xml getinvolved.xml
                        index.xml librarys.xml task.xml todo.xml user.xml
                        velocity.properties vfs.xml
               site/src/xdocs/stylesheets docs.vsl project.xml templates.vm
  Log:
  Transfer site to new CVS
  
  Revision  Changes    Path
  1.1                  jakarta-ant-myrmidon/site/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  velocity.log
  
  
  
  1.1                  jakarta-ant-myrmidon/site/build.xml
  
  Index: build.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <project name="Myrmidon Docs" default="main" basedir=".">
  
      <!--
      Give user a chance to override without editing this file
      (and without typing -D each time he compiles it)
      -->
      <property file="ant.properties"/>
      <property file="../ant.properties"/>
      <property file="${user.home}/.ant.properties"/>
  
      <property name="docs.dir" value="docs"/>
      <property name="xdocs.dir" value="src/xdocs"/>
  
      <!-- Main target -->
      <target name="main" depends="docs" description="Builds the distribution"/>
  
      <target name="docs" description="Generate documentation and website">
          <taskdef name="anakia"
              classname="org.apache.velocity.anakia.AnakiaTask">
              <classpath>
                  <fileset dir="${jakarta-site.dir}/lib">
                      <include name="*.jar"/>
                  </fileset>
              </classpath>
          </taskdef>
  
          <anakia basedir="${xdocs.dir}"
              destdir="${docs.dir}"
              style="docs.vsl"
              projectfile="stylesheets/project.xml"
              includes="**/*.xml"
              excludes="stylesheets/**"
              velocitypropertiesfile="${xdocs.dir}/velocity.properties"
              />
      </target>
  
      <!-- Cleans up build and distribution directories -->
      <target name="clean" description="Deletes all built files">
          <delete dir="${docs.dir}"/>
      </target>
  
  </project>
  
  
  
  1.1                  jakarta-ant-myrmidon/site/docs/ant1compat.html
  
  Index: ant1compat.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  
  <!-- Content Stylesheet for Site -->
  
      
  <!-- start the processing -->
      <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    
                        <meta name="author" value="Darrell DeBoer">
    <meta name="email" value="darrell at apache dot org">
          
        <title>Apache Myrmidon - Ant 1 Compatibitlity Layer</title>
      </head>
    
      <body bgcolor="#ffffff" text="#000000" link="#525D76">    
        <table border="0" width="100%" cellspacing="0">
          <!-- TOP IMAGE -->
          <tr>
            <td>      <td colspan="2">
      <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a>
      </td>
    </td>
            <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></td>
          </tr>
        </table>
        <table border="0" width="100%" cellspacing="4">
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          
          <tr>
            <!-- LEFT SIDE NAVIGATION -->
            <td valign="top" nowrap="true">
                  <p><strong>Myrmidon</strong></p>
      <ul>
            <li>      <a href="./index.html">Introduction</a>
    </li>
            <li>      <a href="./getinvolved.html">Get Involved</a>
    </li>
            <li>      <a href="./user.html">Building Myrmidon</a>
    </li>
            <li>      <a href="./todo.html">Todo List</a>
    </li>
          </ul>
        <p><strong>User Guide</strong></p>
      <ul>
            <li>      <a href="./buildfile.html">Project File</a>
    </li>
            <li>      <a href="./vfs.html">Virtual File System</a>
    </li>
            <li>      <a href="./ant1compat.html">Ant 1 Compatibility Layer</a>
    </li>
            <li>      <a href="./differences.html">Differences to Ant 1</a>
    </li>
            <li>      <a href="./task.html">My First Task</a>
    </li>
          </ul>
        <p><strong>Extending Ant</strong></p>
      <ul>
            <li>      <a href="./configuring.html">Configuration HOWTO</a>
    </li>
            <li>      <a href="./converter.html">Converter HOWTO</a>
    </li>
            <li>      <a href="./type.html">Type HOWTO</a>
    </li>
            <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
    </li>
            <li>      <a href="./librarys.html">Library HOWTO</a>
    </li>
          </ul>
        <p><strong>Container Design</strong></p>
      <ul>
          </ul>
              </td>
            <td align="left" valign="top">
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Overview"><strong>Overview</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>
              The Myrmidon-Ant1 Compatibility layer works by reusing most of the Ant 1 code,
              with tasks and datatypes
              being prefixed with "ant1." in build files. Almost all of the main Ant 1 tree
              is included in the compatibility layer antlib. To insulate from changes in
              the Ant 1 tree, Ant 1 class files are extracted from a jar, rather than
              being compiled from scratch.
              </p>
                                  <p>
              Here's how it works: The first time an Ant 1 task is encountered, an Ant 1
              project is created, and stored in the TaskContext under the name "ant1.project".
              The Ant 1 versions of Task and Project have been extended, overriding core behaviour,
              with Myrmidon-specific behaviour.
              </p>
                                  <p>
              The updated version of Task implements Configurable, receiving it's
              complete Task Model, and actually setting/adding/creating attributes
              with the help of the IntrospectionHelper. This process is designed to
              mimic the Ant 1 configuration policy, although not <i>all</i> of the
              subtle variations of configuration present in Ant 1 are handled.
              </p>
                                  <p>
              The updated version of Project will provide hooks into the Myrmidon TaskContext,
              such as:</p>
                                  <ul>
              <li>logging (done)</li>
              <li>properties (done)</li>
              <li>references (not yet done)</li>
              <li>Task defined by &lt;taskdef&gt; (done)</li>
              </ul>
                                  <p>
              So at present, properties declared in Ant 2 tasks are available to all Ant 1 tasks,
              and vice-versa. However, while a <code>&lt;ant1.path&gt;</code> reference works fine
              in other <code>&lt;ant1.XXX&gt;</code>
              tasks, it's not visible to Ant 2 tasks in the same build, and vice-versa.
              </p>
                                  <p>
              The <code>&lt;taskdef&gt;</code> task works ok, registering the task with the TypeManager using the
              "ant1." prefix. Only a couple of DataTypes (Path and Patternset) are working
              as top-level types, but this should be just a matter of adding references to
              the Ant 1 version of TypeInstanceTask in the descriptor.
              </p>
                                  <p>
              The TransformingProjectBuilder (which is now the default builder for files
              of type ".xml", applies a transformation stylesheet to the file, prefixing select
              tasks (all at present) with "ant.". If a version attribute is encountered, the
              file is not transformed
              </p>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Using the compatibility layer"><strong>Using the compatibility layer</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                            <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Using Ant 1 tasks in a Myrmidon build file"><strong>Using Ant 1 tasks in a Myrmidon build file</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>
                  If you have a Myrmidon build file (eg with <code>version="2.0"</code>
                  on the project element, you can use Ant 1 tasks and datatypes by using
                  the "ant1." suffix on the regular element name.
                  Virtually <i>all</i> tasks and datatypes from Ant 1.4.1 are available
                  in this way.
                  </p>
                                  <p>
                  When declaring a new task using the <code>&lt;ant1.taskdef&gt;</code>
                  task, <i>don't</i> prepend "ant1." to the taskname. This will be
                  done automatically by the taskdef task. However, you will need
                  to use the "ant1." prefix in all uses of that task.
                  </p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Using an existing Ant 1 build file"><strong>Using an existing Ant 1 build file</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>
                  Myrmidon will automatically handle Ant 1 build files using the
                  Ant 1 Compatibility layer. So, using an Ant 1 build
                  file with Myrmidon should be as simple as:</p>
                                  <pre>[myrmidon-command] -f ant1-build-file.xml</pre>
                                  <p>
                  This works as follows: When Myrmidon encounters a ".xml" build file which does not have a
                  <code>version</code> attribute on the top-level <code>project</code>
                  element, it assumes that it is an Ant 1 build file. So all tasks are
                  interpreted as though they are prefixed with the "ant." name prefix.
                  </p>
                      </blockquote>
      </td></tr>
    </table>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Building the compatibility layer"><strong>Building the compatibility layer</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Before building the Ant 1 Compatibility layer, you need to build
              Myrmidon, running the <code>dist-lite</code> target of the main build.
              See <a href="user.html#Building Myrmidon">the build instructions</a>
              for more details.</p>
                                  <p>To build the compatibility layer, simply execute:</p>
                                  <pre>ant -f ant1compat.xml</pre>
                                  <p>from within the root directory of the Myrmidon source tree.</p>
                      </blockquote>
      </td></tr>
    </table>
                </td>
          </tr>
  
          <!-- FOOTER -->
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          <tr><td colspan="2">
            <div align="center"><font color="#525D76" size="-1"><em>
            Copyright &#169; 2000-2002, Apache Software Foundation
            </em></font></div>
          </td></tr>
        </table>
      </body>
    </html>
  <!-- end the processing -->
  
  
  
  
  
  
  
  1.1                  jakarta-ant-myrmidon/site/docs/buildfile.html
  
  Index: buildfile.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  
  <!-- Content Stylesheet for Site -->
  
      
  <!-- start the processing -->
      <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    
                        <meta name="author" value="Adam Murdoch">
    <meta name="email" value="adammurdoch@apache.org">
          
        <title>Apache Myrmidon - User Guide</title>
      </head>
    
      <body bgcolor="#ffffff" text="#000000" link="#525D76">    
        <table border="0" width="100%" cellspacing="0">
          <!-- TOP IMAGE -->
          <tr>
            <td>      <td colspan="2">
      <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a>
      </td>
    </td>
            <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></td>
          </tr>
        </table>
        <table border="0" width="100%" cellspacing="4">
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          
          <tr>
            <!-- LEFT SIDE NAVIGATION -->
            <td valign="top" nowrap="true">
                  <p><strong>Myrmidon</strong></p>
      <ul>
            <li>      <a href="./index.html">Introduction</a>
    </li>
            <li>      <a href="./getinvolved.html">Get Involved</a>
    </li>
            <li>      <a href="./user.html">Building Myrmidon</a>
    </li>
            <li>      <a href="./todo.html">Todo List</a>
    </li>
          </ul>
        <p><strong>User Guide</strong></p>
      <ul>
            <li>      <a href="./buildfile.html">Project File</a>
    </li>
            <li>      <a href="./vfs.html">Virtual File System</a>
    </li>
            <li>      <a href="./ant1compat.html">Ant 1 Compatibility Layer</a>
    </li>
            <li>      <a href="./differences.html">Differences to Ant 1</a>
    </li>
            <li>      <a href="./task.html">My First Task</a>
    </li>
          </ul>
        <p><strong>Extending Ant</strong></p>
      <ul>
            <li>      <a href="./configuring.html">Configuration HOWTO</a>
    </li>
            <li>      <a href="./converter.html">Converter HOWTO</a>
    </li>
            <li>      <a href="./type.html">Type HOWTO</a>
    </li>
            <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
    </li>
            <li>      <a href="./librarys.html">Library HOWTO</a>
    </li>
          </ul>
        <p><strong>Container Design</strong></p>
      <ul>
          </ul>
              </td>
            <td align="left" valign="top">
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Project File"><strong>Project File</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>
  A project file is an XML file that describes which tasks to execute, and in
  which order to execute them in.  A project can be broken up into several steps,
  or <i>targets</i>.  A target is simply a list of the tasks that need to be
  executed to perform the step.  A target may also include some dependency
  information.  Myrmidon makes sure that targets are executed in the correct order,
  so that a target is executed before the targets that depend on it.</p>
                                  <p>The project file format is very similar to the format used in Ant 1.  The
  root element of a project file must be a <code>&lt;project&gt;</code> element.
  It can take the following attributes:
  </p>
                                    <table>
                <tr>
                    <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Attribute
          </font>
    </td>
                        <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Description
          </font>
    </td>
                        <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Default Value
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            name
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            The project name.
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            The name of the project file, with the extension removed.
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            basedir
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            The base directory for the project.  The base directory is used
          to resolve all relative file names used in the project file.
          
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            The directory containing the project file.
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            default
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            The name of the default target.
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            <code>main</code>
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            version
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            The project file format version that the project is written for.
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            None, must be <code>2.0</code>
          </font>
    </td>
        </tr>
          </table>
                                  <p>
  A <code>&lt;project&gt;</code> element can contain the following elements,
  in the order given below:
  </p>
                                  <ul>
  <li><a href="#project-refs">Project references</a></li>
  <li><a href="#antlib-imports">Library imports</a></li>
  <li><a href="#init-tasks">Initialization tasks</a></li>
  <li><a href="#targets">Targets</a></li>
  </ul>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="project-refs"><strong>Project References</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Project references allow the project to import, or reference, other projects.
  A <code>&lt;projectref&gt;</code> element takes the following attributes:</p>
                                    <table>
                <tr>
                    <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Attribute
          </font>
    </td>
                        <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Description
          </font>
    </td>
                        <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Default Value
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            name
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            The name to use to identify the referenced project.
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Required
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            location
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            The path to the project file to reference.
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Required
          </font>
    </td>
        </tr>
          </table>
                                  <p>
  The targets of a referenced project can be used in the <code>depends</code> list
  of a target in the referencing project, using the syntax
  <code><i>project-name</i>-&gt;<i>target-name</i></code>.  Here is a simple example:</p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>
  
  &lt;project version=&quot;2.0&quot;&gt;
      &lt;!-- Reference another project --&gt;
      &lt;projectref name=&quot;subproject&quot; location=&quot;subproject/build.xml&quot;/&gt;
  
      &lt;!-- Use the &quot;compile&quot; target from the referenced project --&gt;
      &lt;target name=&quot;main&quot; depends=&quot;subproject-&gt;compile&quot;&gt;
          .. do some stuff ..
      &lt;/target&gt;
  &lt;/project&gt;
  </pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="antlib-imports"><strong>Library Imports</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Library imports allow the project to import the tasks and data-types from an
  antlib.  An <code>&lt;import&gt;</code> element takes the following attributes:</p>
                                    <table>
                <tr>
                    <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Attribute
          </font>
    </td>
                        <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Description
          </font>
    </td>
                        <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Default Value
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            library
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            The name of the library to import.  The <code>ext</code> directory
          of the Myrmidon distribution is searched for a library file with
          the given name, and an <code>atl</code> extension.
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Required
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            type
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            The type of definition to import.  Values include <code>task</code>,
          and <code>data-type</code>.
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            None
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            name
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            The name of the type to import.
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            None
          </font>
    </td>
        </tr>
          </table>
                                  <p>
  If the <code>type</code> and <code>name</code> attributes are not provided,
  the entire contents of the antlib are imported.
  </p>
                                  <p>The following example import the <code>&lt;my-task&gt;</code> task from
  the <code>my-tasks</code> antlib.</p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>
  
  &lt;project version=&quot;2.0&quot;&gt;
    &lt;!-- Import task &lt;my-task&gt; from the 'my-tasks' antlib. --&gt;
    &lt;import library=&quot;my-tasks&quot; type=&quot;task&quot; name=&quot;my-task&quot;/&gt;
  
    &lt;target name=&quot;main&quot;&gt;
       &lt;my-task some-prop=&quot;..&quot;/&gt;
    &lt;/target&gt;
  &lt;/project&gt;
  </pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="init-tasks"><strong>Initialization Tasks</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Initialisation tasks are run before any of the project's targets are run, and
  are used to initialise the project.  Any task can be used as an initialization
  task, including <code>&lt;property&gt;</code> and data-type instances.  An example:</p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>
  
  &lt;project version=&quot;2.0&quot;&gt;
  
    &lt;property name=&quot;some-property&quot; value=&quot;some value&quot;/&gt;
    &lt;path id=&quot;classpath&quot;&gt;
      &lt;fileset dir=&quot;lib&quot;/&gt;
    &lt;/path&gt;
    &lt;log&gt;Set classpath to ${classpath}&lt;/log&gt;
  
    &lt;target name=&quot;main&quot;&gt;
      .. do some stuff ..
    &lt;/target&gt;
  
  &lt;/project&gt;
  </pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="targets"><strong>Targets</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Targets have a similar format to targets in Ant 1.x, though some of the
  behaviour is different.  A <code>&lt;target&gt;</code> element takes the
  following attributes:</p>
                                    <table>
                <tr>
                    <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Attribute
          </font>
    </td>
                        <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Description
          </font>
    </td>
                        <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Default Value
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            name
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            The name of the target.
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Required
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            depends
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            A comma-separated list of targets that this target depends on.
          This list can contain targets from referenced projects.
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            None
          </font>
    </td>
        </tr>
          </table>
                      </blockquote>
      </td></tr>
    </table>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Tasks"><strong>Tasks</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>
      Listed below are some of the current set of tasks.  You can find example
      usages of these tasks in the sample project file <code>src/make/sample.ant</code>.
      </p>
                                  <h3><code>&lt;condition&gt;</code></h3>
                                  <p>Sets a property if a particular condition is true.  See
      <a href="#Conditions">Conditions</a> for a list of available conditions.</p>
                                  <h3><code>&lt;fail&gt;</code></h3>
                                  <p>Causes the build to fail.</p>
                                  <h3><code>&lt;if&gt;</code></h3>
                                  <p>Conditionally executes a set of tasks.</p>
                                  <h3><code>&lt;load-properties&gt;</code></h3>
                                  <p>Loads a set of properties from a file.</p>
                                  <h3><code>&lt;log&gt;</code></h3>
                                  <p>Writes a log message.</p>
                                  <h3><code>&lt;property&gt;</code></h3>
                                  <p>Sets a property.</p>
                                  <h3><code>&lt;try-catch&gt;</code></h3>
                                  <p>Runs a set of tasks, with a provided error and clean-up handler.</p>
                                  <h3><code>&lt;converter-def&gt;</code></h3>
                                  <p>Register a type converter.  These are used when configuring a task
      or data-type from attributes.</p>
                                  <h3><code>&lt;type-def&gt;</code></h3>
                                  <p>Register a task or data-type.</p>
                                  <h3><code>&lt;import&gt;</code></h3>
                                  <p>Register the contents of an antlib.</p>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Conditions"><strong>Conditions</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>The following conditions are available </p>
                                  <h3><code>&lt;and&gt;</code></h3>
                                  <p>Evaluates a set of nested conditions, and AND them together.  Evaluation is
      lazy.  An empty <code>&lt;and&gt;</code> condition evaluates to true.</p>
                                  <h3><code>&lt;available&gt;</code></h3>
                                  <p>Tests if a particular class or resource is available.</p>
                                  <h3><code>&lt;file-test&gt;</code></h3>
                                  <p>Tests a file against a set of <a href="vfs.html#File Selectors">file selectors</a>.</p>
                                  <h3><code>&lt;is-set&gt;</code></h3>
                                  <p>Tests whether a proeprty is set, and not set to 'false'.</p>
                                  <h3><code>&lt;or&gt;</code></h3>
                                  <p>Evaluates a set of nested conditions, and OR them together.  Evaluation is
      lazy.  An empty <code>&lt;or&gt;</code> evaluates to true.</p>
                                  <h3><code>&lt;os&gt;</code></h3>
                                  <p>Tests which operating system the build is running on.</p>
                                  <h3><code>&lt;not&gt;</code></h3>
                                  <p>Negates a nested condition.</p>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="File Name Mappers"><strong>File Name Mappers</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>The following file name mappers are available:</p>
                                  <h3><code>&lt;chain&gt;</code></h3>
                                  <p>Applies a set of nested file name mappers to file names.</p>
                                  <h3><code>&lt;flatten&gt;</code></h3>
                                  <p>Maps all file names to a single directory.</p>
                                  <h3><code>&lt;prefix&gt;</code></h3>
                                  <p>Adds a prefix to the front of each file name.</p>
                                  <h3><code>&lt;map-extension&gt;</code></h3>
                                  <p>Changes the extension of file names.</p>
                      </blockquote>
      </td></tr>
    </table>
                </td>
          </tr>
  
          <!-- FOOTER -->
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          <tr><td colspan="2">
            <div align="center"><font color="#525D76" size="-1"><em>
            Copyright &#169; 2000-2002, Apache Software Foundation
            </em></font></div>
          </td></tr>
        </table>
      </body>
    </html>
  <!-- end the processing -->
  
  
  
  
  
  
  
  1.1                  jakarta-ant-myrmidon/site/docs/classloader.html
  
  Index: classloader.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  
  <!-- Content Stylesheet for Site -->
  
      
  <!-- start the processing -->
      <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    
                        <meta name="author" value="Peter Donald">
    <meta name="email" value="peter@apache.org">
          
        <title>Apache Myrmidon - On ClassLoaders in Ant 2</title>
      </head>
    
      <body bgcolor="#ffffff" text="#000000" link="#525D76">    
        <table border="0" width="100%" cellspacing="0">
          <!-- TOP IMAGE -->
          <tr>
            <td>      <td colspan="2">
      <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a>
      </td>
    </td>
            <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></td>
          </tr>
        </table>
        <table border="0" width="100%" cellspacing="4">
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          
          <tr>
            <!-- LEFT SIDE NAVIGATION -->
            <td valign="top" nowrap="true">
                  <p><strong>Myrmidon</strong></p>
      <ul>
            <li>      <a href="./index.html">Introduction</a>
    </li>
            <li>      <a href="./getinvolved.html">Get Involved</a>
    </li>
            <li>      <a href="./user.html">Building Myrmidon</a>
    </li>
            <li>      <a href="./todo.html">Todo List</a>
    </li>
          </ul>
        <p><strong>User Guide</strong></p>
      <ul>
            <li>      <a href="./buildfile.html">Project File</a>
    </li>
            <li>      <a href="./vfs.html">Virtual File System</a>
    </li>
            <li>      <a href="./ant1compat.html">Ant 1 Compatibility Layer</a>
    </li>
            <li>      <a href="./differences.html">Differences to Ant 1</a>
    </li>
            <li>      <a href="./task.html">My First Task</a>
    </li>
          </ul>
        <p><strong>Extending Ant</strong></p>
      <ul>
            <li>      <a href="./configuring.html">Configuration HOWTO</a>
    </li>
            <li>      <a href="./converter.html">Converter HOWTO</a>
    </li>
            <li>      <a href="./type.html">Type HOWTO</a>
    </li>
            <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
    </li>
            <li>      <a href="./librarys.html">Library HOWTO</a>
    </li>
          </ul>
        <p><strong>Container Design</strong></p>
      <ul>
          </ul>
              </td>
            <td align="left" valign="top">
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="ClassLoader Management"><strong>ClassLoader Management</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>In many ways Ant 2 needs to follow rules similar to a number of
              different application servers with respect to ClassLoader management.
              Ant 2 will create a number of different ClassLoaders that have access
              to different sets of resources (and thus Classes). The main reason
              for this arrangment is to partition different sections of the
              application such as the Container, the Task API, task/type libraries
              and support libraries.</p>
                                  <p>The recomended structure for ClassLoader relationships is a hierarchy.
              When a ClassLoader is asked for a resource (or a class) it first delegates
              to it's parent to ask for the resource. If the resource is not present in
              its parent ClassLoader then the ClassLoader attempts to locate the resource
              in it's own store. In practice this means that all the classes (and static
              variables defined by said classes) in a parent ClassLoader are shared with
              the child ClassLoaders.</p>
                                  <p>Using kooky ascii art, the specific ClassLoader structure for Ant 2 is as
              follows:</p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>
                    Bootstrap
                        |
                     System
                        |
                     Common
                    /      \
               Container  Shared
                           /   \
                      Antlib1  Antlib2 ...
              </pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
                                  <ul>
                  <li>
                    The
                      <strong>Bootstrap</strong> ClassLoader contains the classes and resources
                    provided by the Java runtime.
  
                  </li>
                  <li>
                    The
                      <strong>System</strong> ClassLoader contains the classes that were made accessible
                    via the CLASSPATH environment variable. If the standard ant script was used then this
                    should only contain the classes that are used to bootstrap the ant runtime. ie
  
                      <code>$ANT_HOME/bin/ant-launcher.jar</code>
                  </li>
                  <li>
                    The
                      <strong>Common</strong> ClassLoader contains the classes and resources
                    that are made visible to both the Container and to all the ant type libraries. This
                    contains all the classes that the Container uses to communicate with tasks and other
                    supporting infrastructure. In particular it contains the following APIs;
  
                      <ul>
                          <li>
                              <em>Task API</em> - Contains the classes that are part of the API used
                            to define tasks.
  
                          </li>
                          <li>
                              <em>ProjectListener API</em> - Contains the classes necessary to define new
                            ProjectListeners.
  
                          </li>
                          <li>
                              <em>Aspect API</em> - Contains the classes that are used to define Aspects
                            of the container.
  
                          </li>
                          <li>
                              <em>Container API</em> - Contains the interfaces that are required to communicate
                            with the objects deep within the container.
                              <strong>NOTE</strong>: These interfaces
                            are not to be used by user tasks but are made available so that certain tasks (such
                            as &lt;antcall/&gt;) can be implemented. However they are subject to change without
                            notice between between different Ant 2 versions.
  
                          </li>
                      </ul>
                      <p>
                        These classes are loaded from all the jars present in the
                          <code>$ANT_HOME/lib</code>
                        directory.
  
                      </p>
                  </li>
                  <li>
                    The
                      <strong>Container</strong> ClassLoader contains all the classes and resources
                    that are part of the actual implementation of the Container. These classes are not
                    directly accessible to any Ant library or task. Some of the classes are indirectly
                    accessible to tasks and other elements defined in the ant libraries as they implement
                    interfaces defined in the
                      <strong>Common</strong> ClassLoader. The classes that are
                    stored in jars in the
                      <code>$ANT_HOME/bin/lib/</code> directory.
  
                  </li>
                  <li>
                    The
                      <strong>Shared</strong> ClassLoader contains all the classes and resources
                    that are shared across all of the ant libraries (unless they are als needed by the
                    container in which case they should be placed int the
                      <strong>Container</strong>
                    ClassLoader). This ClassLoader is populated by all the jars that are contained in
                    the
                      <code>$ANT_HOME/shared/</code> directory.
  
                  </li>
                  <li>
                    The
                      <strong>AntLib</strong> ClassLoaders each contain the classes and resources
                    that required by that particular library. Note that in some cases a single Ant
                    Library will manifest as a single ClassLoader containing a single jar. However
                    in some cases it is possible for one Ant Library to have multiple jars in its
                    ClassLoader or even have multiple ClassLoaders. See XXXX for further details.
  
                  </li>
              </ul>
                      </blockquote>
      </td></tr>
    </table>
                </td>
          </tr>
  
          <!-- FOOTER -->
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          <tr><td colspan="2">
            <div align="center"><font color="#525D76" size="-1"><em>
            Copyright &#169; 2000-2002, Apache Software Foundation
            </em></font></div>
          </td></tr>
        </table>
      </body>
    </html>
  <!-- end the processing -->
  
  
  
  
  
  
  
  1.1                  jakarta-ant-myrmidon/site/docs/configuring.html
  
  Index: configuring.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  
  <!-- Content Stylesheet for Site -->
  
      
  <!-- start the processing -->
      <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    
                        <meta name="author" value="Peter Donald">
    <meta name="email" value="peter@apache.org">
          
        <title>Apache Myrmidon - On Task Configuring in Ant 2</title>
      </head>
    
      <body bgcolor="#ffffff" text="#000000" link="#525D76">    
        <table border="0" width="100%" cellspacing="0">
          <!-- TOP IMAGE -->
          <tr>
            <td>      <td colspan="2">
      <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a>
      </td>
    </td>
            <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></td>
          </tr>
        </table>
        <table border="0" width="100%" cellspacing="4">
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          
          <tr>
            <!-- LEFT SIDE NAVIGATION -->
            <td valign="top" nowrap="true">
                  <p><strong>Myrmidon</strong></p>
      <ul>
            <li>      <a href="./index.html">Introduction</a>
    </li>
            <li>      <a href="./getinvolved.html">Get Involved</a>
    </li>
            <li>      <a href="./user.html">Building Myrmidon</a>
    </li>
            <li>      <a href="./todo.html">Todo List</a>
    </li>
          </ul>
        <p><strong>User Guide</strong></p>
      <ul>
            <li>      <a href="./buildfile.html">Project File</a>
    </li>
            <li>      <a href="./vfs.html">Virtual File System</a>
    </li>
            <li>      <a href="./ant1compat.html">Ant 1 Compatibility Layer</a>
    </li>
            <li>      <a href="./differences.html">Differences to Ant 1</a>
    </li>
            <li>      <a href="./task.html">My First Task</a>
    </li>
          </ul>
        <p><strong>Extending Ant</strong></p>
      <ul>
            <li>      <a href="./configuring.html">Configuration HOWTO</a>
    </li>
            <li>      <a href="./converter.html">Converter HOWTO</a>
    </li>
            <li>      <a href="./type.html">Type HOWTO</a>
    </li>
            <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
    </li>
            <li>      <a href="./librarys.html">Library HOWTO</a>
    </li>
          </ul>
        <p><strong>Container Design</strong></p>
      <ul>
          </ul>
              </td>
            <td align="left" valign="top">
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Introduction"><strong>Introduction</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>This section will describe in detail the mechanism via which tasks are
              configured. Configuration is the name given to the stage in tasks
              lifecycle via which the XML representation is mapped onto the task 
              object.</p>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Names"><strong>Names</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>When mapping the XML representation on to the task object you
              need to be able map the names as they appear in the XML to the 
              names as they appear in the Java code. The process is for generating
              a java name from the xml name is as follows.</p>
                                  <ol>
                <li>Capitalize the first character of name.</li>
                <li>Find any '-' characters in XML name and remove character and
                capitalize the following letter. (And there must be a following 
                letter)</li>
              </ol>
                                  <p>Some example mappings;</p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>
  my-name    ===&gt;   MyName
  aString    ===&gt;   AString
  Basedir    ===&gt;   Basedir
  baseDir    ===&gt;   BaseDir
  url        ===&gt;   Url</pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
                                  <p>Note that the above transformation is lossy and as such the 
              following XML names all map to the same Java name. The ant1.x mapping 
              is similarly lossy and in practice this has not been an issue.</p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>
  base-dir   ===&gt;   BaseDir
  Base-dir   ===&gt;   BaseDir
  baseDir    ===&gt;   BaseDir
  BaseDir    ===&gt;   BaseDir</pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
                                  <p><i>NOTE: We should really resolve this and either disallow '-' characters 
              or disallow uppercase or something. (PD)</i></p>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Resolving Values"><strong>Resolving Values</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>The first stage of mapping the XML representation to the task
              is resolving all text data. The text data that needs to be resolved 
              include the values of attributes and the content.</p>
                                  <p>Resolution consists of expanding any property references in the text
              data. Property references are identified as starting with the token 
              "${" and finishing with another "}" token. The text 
              in between is the name of a property. The value of the property replaces
              the sequence of text starting with the "${" token and finishing 
              with the "}" token.</p>
                                  <p>Note that the value of the property may not be a string. If the text data
              contains text (or other property references) to either side of the property
              reference then it must be <a href="converter.html">converted</a> to a 
              String.</p>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Modeller"><strong>Modeller</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Currently the representation of object are stored in a hierarchial 
              tree of <code>org.apache.myrmidon.api.metadata.ModelElement</code>
              objects. Each ModelElement has a number of attributes and can have
              either content or sub-elements.</p>
                                  <p>In most cases it is the responsibility of the runtime to map 
              the ModelElement onto an object. However in some cases it may be useful 
              for the object to get access to it's own model and for it to explicitly
              manage it's own configuration. In this case the object should implement
              the <code>org.apache.myrmidon.api.metadata.Modeller</code> interface
              which will provide the mechanism for the object to receive its own 
              representation and configure itself.</p>
                                  <p>Note that the Modeller mechanism should be avoided if possible
              as it adds considerable complexity to the implementing object.</p>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Attributes"><strong>Attributes</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>To map an XML attribute on to a Java object, the name of the 
              attribute is mapped to a java name and prefixed with the string
              "set". The resulting string is then used to look up a 
              method with a single parameter.</p>
                                  <p>For example, for the attribute "world" would result
              in a lookup of a method named "setWorld" with a single
              parameter.</p>
                                  <p>If multiple methods were matched during the lookup then an 
              exception is thrown indicating ambiguity. Theres is an exception
              to this rule that allows 2 methods to be matched if one of the 
              methods takes a <code>java.lang.String</code> parameter. The method
              that has the <code>java.lang.String</code> parameter is ignored and 
              the other method would be chosen. This exception is allowed as it is 
              common practice for a task to evolve from String parameters to more 
              strongly typed parameters.</p>
                                  <p>The resolved text data of the attribute must be 
              <a href="converter.html">converted</a> to the type of the matched 
              methods parameter. For example, if the "setWorld" method
              took a parameter of type <code>java.io.File</code> then the resolved
              text data must be converted into a <code>java.io.File</code>. The
              conversion is done by the Converter architecture that is more fully 
              described in the <a href="converter.html">Converter HOWTO</a>.</p>
                                  <p>After the value is converted to the correct type the method is 
              invoked with the converted value.</p>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Content"><strong>Content</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>The XML representation of object can have either have nested
              elements or nested text (content) but not both. To add the content
              to an object a method named "content" with one parameter is looked 
              up. The resolved text data for content is then 
              <a href="converter.html">converted</a> to the type of the parameter
              and passed in via the method.</p>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Element"><strong>Element</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Mapping an ModelElement onto a java object is a series of steps.
              If the ModelElement name ends with the string "-ref" then 
              it is treated as a reference element - see the <em>Referrenced 
              Elements</em> section. Otherwise, the element is first attempted to 
              be mapped as a <em>Named Element</em> and if no match is found via 
              that method it tries to treat the element as a <em>Typed Element</em>.</p>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Named Elements"><strong>Named Elements</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>To map a named ModelElement on to a Java object, the name of 
              the element is mapped to a java name and prefixed with the string
              "add". The resulting string is then used to look up a 
              method with a single parameter.</p>
                                  <p>For example, for the attribute "geometry" would result
              in a lookup of a method named "addGeometry" with a single
              parameter. If multiple methods were matched during the lookup then an 
              exception is thrown indicating ambiguity. If no methods were found that
              match name then skip down to configuring "typed" elements.</p>
                                  <p>The type of the methods single parameter is then examined to determine
              what happens next. There are two valid situations, if neither of these are 
              satisfied, then an exception is thrown.</p>
                                  <ul>
                <li>The parameters type is <code>org.apache.myrmidon.api.metadata.ModelElement</code></li>
                <li>The parameters type is a concrete class</li>
              </ul>
                                  <p>1. If the parameter has a type of <code>org.apache.myrmidon.api.metadata.ModelElement</code>
              then the un-modified model representation of element is passed to object by invoking
              the adder method.</p>
                                  <p>2. If the parameters type is concrete then an instance of the parameter is 
              instantiated using the default constructor. This created object is then configured 
              in the same manner as task using the elements representation as the model. After
              the object is configured it is passed into object by invoking the adder method.</p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Referrenced Elements"><strong>Referrenced Elements</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>A referenced element is one that has a name ending in 
              "-ref" and has a single attribute "name"
              and no content or child elements.</p>
                                  <p>The value of the "name" attribute is the name of a property. 
              The value of this property is retrieved from the TaskContext.</p>
                                  <p>Like with <em>Named Elements</em> the name of the element (minus
              the "-ref" part) is mapped to a java name and prefixed with the string
              "add". The resulting string is then used to look up a 
              method with a single parameter. If multiple methods were matched during the lookup then an 
              exception is thrown indicating ambiguity.</p>
                                  <p>The value retrieved from the TaskContext is then converted to the type 
              of the methods parameter and the add method is invoked with the converted value.</p>
                                  <p>An example usage is the following;</p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>
  
              &lt;my-task ...&gt;
                &lt;classpath-ref name=&quot;project.class.path&quot;/&gt;
              &lt;/my-task&gt;
  
  </pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Typed Elements"><strong>Typed Elements</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>"Typed" elements can also be added to an object. A typed element 
              is one in which the name of the element actually refers to a type rather than the 
              name of the adder to call.</p>
                                  <p>For example, you may wish to allow a task to add arbitrary instances of the 
              Condition role to a task. So instead of adding methods such as 
              <code>addAnd(AndCondition)</code>, <code>addOr(OrCondition)</code> and
              <code>addXor(XorCondition)</code> you can instead add a single method 
              <code>add(Condition)</code>. This vastly simplifies the amount of work required
              to write tasks that take conditions. More importantly it allows end-users to 
              extend the number of elements selected by task. For instance if the user wanted
              a "nand" condition they could write the Nand type use it in their build
              file. For a discussion on roles and types see the <a href="types.html">Types
              HOWTO</a>.</p>
                                  <p>To use a Typed adder there must be a single method named "add" that
              has a single parameter. The parameter <em>MUST</em> be an abstract interface and
              must be registered as a role. The name of the element is then used to lookup the
              a type in the TypeManager with a role matching the interface name.</p>
                                  <p>For example if an element named "nand" was added to an object that had 
              an adder with the signature <code>void add( Condition condition )</code> then 
              the type named "nand" in the role "Condition" would be looked up.
              An instance of the type would then be created using the default constructor and the
              created object would be configured and then adder to object using adder.</p>
                      </blockquote>
      </td></tr>
    </table>
                      </blockquote>
      </td></tr>
    </table>
                </td>
          </tr>
  
          <!-- FOOTER -->
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          <tr><td colspan="2">
            <div align="center"><font color="#525D76" size="-1"><em>
            Copyright &#169; 2000-2002, Apache Software Foundation
            </em></font></div>
          </td></tr>
        </table>
      </body>
    </html>
  <!-- end the processing -->
  
  
  
  
  
  
  
  1.1                  jakarta-ant-myrmidon/site/docs/differences.html
  
  Index: differences.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  
  <!-- Content Stylesheet for Site -->
  
      
  <!-- start the processing -->
      <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    
                        <meta name="author" value="Adam Murdoch">
    <meta name="email" value="adammurdoch@apache.org">
          
        <title>Apache Myrmidon - Differences to Ant 1</title>
      </head>
    
      <body bgcolor="#ffffff" text="#000000" link="#525D76">    
        <table border="0" width="100%" cellspacing="0">
          <!-- TOP IMAGE -->
          <tr>
            <td>      <td colspan="2">
      <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a>
      </td>
    </td>
            <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></td>
          </tr>
        </table>
        <table border="0" width="100%" cellspacing="4">
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          
          <tr>
            <!-- LEFT SIDE NAVIGATION -->
            <td valign="top" nowrap="true">
                  <p><strong>Myrmidon</strong></p>
      <ul>
            <li>      <a href="./index.html">Introduction</a>
    </li>
            <li>      <a href="./getinvolved.html">Get Involved</a>
    </li>
            <li>      <a href="./user.html">Building Myrmidon</a>
    </li>
            <li>      <a href="./todo.html">Todo List</a>
    </li>
          </ul>
        <p><strong>User Guide</strong></p>
      <ul>
            <li>      <a href="./buildfile.html">Project File</a>
    </li>
            <li>      <a href="./vfs.html">Virtual File System</a>
    </li>
            <li>      <a href="./ant1compat.html">Ant 1 Compatibility Layer</a>
    </li>
            <li>      <a href="./differences.html">Differences to Ant 1</a>
    </li>
            <li>      <a href="./task.html">My First Task</a>
    </li>
          </ul>
        <p><strong>Extending Ant</strong></p>
      <ul>
            <li>      <a href="./configuring.html">Configuration HOWTO</a>
    </li>
            <li>      <a href="./converter.html">Converter HOWTO</a>
    </li>
            <li>      <a href="./type.html">Type HOWTO</a>
    </li>
            <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
    </li>
            <li>      <a href="./librarys.html">Library HOWTO</a>
    </li>
          </ul>
        <p><strong>Container Design</strong></p>
      <ul>
          </ul>
              </td>
            <td align="left" valign="top">
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Differences to Ant 1.x"><strong>Differences to Ant 1.x</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Some of the differences between Ant 1.x and Myrmidon:</p>
                                  <ul>
                  <li>
                  Groups of tasks can be assembled into self-describing
                      <i>antlib</i> task libraries.  This makes it very easy to
                  distribute and install tasks and data-types.
                  </li>
                  <li> A project can import other projects, and reference their targets. </li>
                  <li>Properties and data type references now share the same namespace.</li>
                  <li>
                  Changes to task and data-type API:
                      <ul>
                          <li>An interface based API, through which a task interacts with the
                          task engine, and the services it provides.</li>
                          <li>A well-defined object lifecycle.</li>
                          <li>Polymorphic types are supported when objects are configured.</li>
                          <li>Reference handling is handled automatically when objects are configured.</li>
                          <li>Aspects can be used to decorate tasks, to add facilities like logging,
                          error handling, or user preferences.</li>
                      </ul>
                  </li>
                  <li>A set of well-defined services and APIs have been introduced, to allow
                  tasks to do their work without depending on other tasks:
                      <ul>
                          <li>Execute external commands.</li>
                          <li>Execute other tasks.</li>
                          <li>Manage ClassLoaders and Class-paths.</li>
                          <li>Virtual file system (in progress).</li>
                          <li>Execute Java applications (in progress).</li>
                          <li>...</li>
                      </ul>
                  </li>
              </ul>
                                  <p>There are plenty more features planned.  You can read about them
                  <a href="todo.html">here</a>.
              </p>
                      </blockquote>
      </td></tr>
    </table>
                </td>
          </tr>
  
          <!-- FOOTER -->
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          <tr><td colspan="2">
            <div align="center"><font color="#525D76" size="-1"><em>
            Copyright &#169; 2000-2002, Apache Software Foundation
            </em></font></div>
          </td></tr>
        </table>
      </body>
    </html>
  <!-- end the processing -->
  
  
  
  
  
  
  
  1.1                  jakarta-ant-myrmidon/site/docs/getinvolved.html
  
  Index: getinvolved.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  
  <!-- Content Stylesheet for Site -->
  
      
  <!-- start the processing -->
      <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    
                        <meta name="author" value="Adam Murdoch">
    <meta name="email" value="adammurdoch@apache.org">
          
        <title>Apache Myrmidon - Get Involved</title>
      </head>
    
      <body bgcolor="#ffffff" text="#000000" link="#525D76">    
        <table border="0" width="100%" cellspacing="0">
          <!-- TOP IMAGE -->
          <tr>
            <td>      <td colspan="2">
      <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a>
      </td>
    </td>
            <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></td>
          </tr>
        </table>
        <table border="0" width="100%" cellspacing="4">
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          
          <tr>
            <!-- LEFT SIDE NAVIGATION -->
            <td valign="top" nowrap="true">
                  <p><strong>Myrmidon</strong></p>
      <ul>
            <li>      <a href="./index.html">Introduction</a>
    </li>
            <li>      <a href="./getinvolved.html">Get Involved</a>
    </li>
            <li>      <a href="./user.html">Building Myrmidon</a>
    </li>
            <li>      <a href="./todo.html">Todo List</a>
    </li>
          </ul>
        <p><strong>User Guide</strong></p>
      <ul>
            <li>      <a href="./buildfile.html">Project File</a>
    </li>
            <li>      <a href="./vfs.html">Virtual File System</a>
    </li>
            <li>      <a href="./ant1compat.html">Ant 1 Compatibility Layer</a>
    </li>
            <li>      <a href="./differences.html">Differences to Ant 1</a>
    </li>
            <li>      <a href="./task.html">My First Task</a>
    </li>
          </ul>
        <p><strong>Extending Ant</strong></p>
      <ul>
            <li>      <a href="./configuring.html">Configuration HOWTO</a>
    </li>
            <li>      <a href="./converter.html">Converter HOWTO</a>
    </li>
            <li>      <a href="./type.html">Type HOWTO</a>
    </li>
            <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
    </li>
            <li>      <a href="./librarys.html">Library HOWTO</a>
    </li>
          </ul>
        <p><strong>Container Design</strong></p>
      <ul>
          </ul>
              </td>
            <td align="left" valign="top">
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Get Involved"><strong>Get Involved</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>There are plenty of things you can do to help out with Myrmidon.  The
              <a href="todo.html">Todo list </a> describes items which still need to
              be done.  Of course, since this is an open-source project, there's
              plenty of scope for experimentation, and you can pretty much make up
              your own items to work on.</p>
                                  <p>Some things that are worth reading if you do want to get involved:</p>
                                  <ul>
                  <li>The <a href="http://jakarta.apache.org/ant/ant2/">Ant 2</a> goals and requirements.</li>
                  <li>The <a href="http://jakarta.apache.org/ant/ant2/actionlist.html">Ant 1.9 Action List</a>.</li>
                  <li>The Jakarta Project's <a href="http://jakarta.apache.org/site/getinvolved.html">Get Involved</a> page.</li>
              </ul>
                                  <p>There is no Ant 2 or Myrmidon mailing list yet, so direct any questions
              or comments you have to the ant-dev mailing list.</p>
                      </blockquote>
      </td></tr>
    </table>
                </td>
          </tr>
  
          <!-- FOOTER -->
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          <tr><td colspan="2">
            <div align="center"><font color="#525D76" size="-1"><em>
            Copyright &#169; 2000-2002, Apache Software Foundation
            </em></font></div>
          </td></tr>
        </table>
      </body>
    </html>
  <!-- end the processing -->
  
  
  
  
  
  
  
  1.1                  jakarta-ant-myrmidon/site/docs/index.html
  
  Index: index.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  
  <!-- Content Stylesheet for Site -->
  
      
  <!-- start the processing -->
      <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    
                        <meta name="author" value="Peter Donald">
    <meta name="email" value="peter@apache.org">
          
        <title>Apache Myrmidon - Myrmidon</title>
      </head>
    
      <body bgcolor="#ffffff" text="#000000" link="#525D76">    
        <table border="0" width="100%" cellspacing="0">
          <!-- TOP IMAGE -->
          <tr>
            <td>      <td colspan="2">
      <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a>
      </td>
    </td>
            <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></td>
          </tr>
        </table>
        <table border="0" width="100%" cellspacing="4">
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          
          <tr>
            <!-- LEFT SIDE NAVIGATION -->
            <td valign="top" nowrap="true">
                  <p><strong>Myrmidon</strong></p>
      <ul>
            <li>      <a href="./index.html">Introduction</a>
    </li>
            <li>      <a href="./getinvolved.html">Get Involved</a>
    </li>
            <li>      <a href="./user.html">Building Myrmidon</a>
    </li>
            <li>      <a href="./todo.html">Todo List</a>
    </li>
          </ul>
        <p><strong>User Guide</strong></p>
      <ul>
            <li>      <a href="./buildfile.html">Project File</a>
    </li>
            <li>      <a href="./vfs.html">Virtual File System</a>
    </li>
            <li>      <a href="./ant1compat.html">Ant 1 Compatibility Layer</a>
    </li>
            <li>      <a href="./differences.html">Differences to Ant 1</a>
    </li>
            <li>      <a href="./task.html">My First Task</a>
    </li>
          </ul>
        <p><strong>Extending Ant</strong></p>
      <ul>
            <li>      <a href="./configuring.html">Configuration HOWTO</a>
    </li>
            <li>      <a href="./converter.html">Converter HOWTO</a>
    </li>
            <li>      <a href="./type.html">Type HOWTO</a>
    </li>
            <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
    </li>
            <li>      <a href="./librarys.html">Library HOWTO</a>
    </li>
          </ul>
        <p><strong>Container Design</strong></p>
      <ul>
          </ul>
              </td>
            <td align="left" valign="top">
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="What is Ant?"><strong>What is Ant?</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Ant is a cross-platform build tool that features ease of
              use and extensibility as it's primary goal.</p>
                                  <p>Why another build tool when there is already make, gnumake,
              nmake, jam, and others? Make-like tools are inherently shell-based;
              they execute native commands and shell scripts to perform the work
              associated with the build process. So to extend the the tool by
              writing a program or script executable by the OS you are on. This
              makes it difficult to achieve portability between platforms.</p>
                                  <p>Ant is a different beast. Instead of using OS-specific commands
              to extend the build process, you leverage the cross-platform features
              of Java to write "tasks". This makes it much easier to achieve
              a portal build process between platforms. Ant also differs in that it uses
              XML to describe the build process.</p>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="What is Myrmidon?"><strong>What is Myrmidon?</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Myrmidon is a proposal for Ant 2. Ant 2 is the next evolution of the
              Ant build tool aimed at removing many of the limitations of the Ant 1.x
              product. In particular it aims to;</p>
                                  <ul>
                  <li>Remove ambiguities and points of confusion for build file
                  writers.</li>
                  <li>Ease deployment and management of 3rd party tasks and
                  dependencies.</li>
                  <li>Simplify development of tasks by task-writers.</li>
                  <li>Enable ad-hoc "tasks" to be written inside build file,
                  probably using well known scripting languages such as python and
                  javascript. (Possible in Ant 1.x but prohibitively difficult).</li>
                  <li>Integrate templating technologies such as XSLT, velocity etc
                  to enable development of reusable build file elements.</li>
              </ul>
                                  <p> You can read more about the goals of Ant 2
                  <a href="http://jakarta.apache.org/ant/ant2/">here</a>.
              </p>
                                  <p>Myrmidon was specifically designed as both a tool and as
              an API library that can be reused in other products. It contains the
              basic building blocks for assembling any sort of task-based tool. Ant 2
              is an example of such a tool, which could be assembled using the Myrmidon
              task container, and a library of build related tasks. In the future expect
              to see Testing frameworks, Job Schedulers (ie Cron managers), shells
              and install tools based on the Myrmidon base.</p>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="A Rose by any other name ..."><strong>A Rose by any other name ...</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>
                The name Myrmidon is a derivation of a mythological name for some ants that were turned
                into soldiers by the god Zeus. It came to mean "a subordinate who executes orders
                unquestioningly" which seemed suitable for a task execution/build tool. A more complete
                description stolen from
                  <a href="http://bondi-blue.parlez.com/previous_words/myrmidon.txt">
                                              http://bondi-blue.parlez.com/previous_words/myrmidon.txt</a>.
              </p>
                                  <quote>
                  <i>The appellation Myrmidon was derived from the Greek word "myrmex",
                  meaning ant.  According to Greek mythology, the Myrmidons were
                  transformed into humans by the god Zeus as an act of kindness to his
                  son Aeacus.  King Aeacus, captivated by a colony of ants, prayed
                  that he should receive an increase in population equal to the
                  number of ants before him.  When he awoke the next day, the ants
                  were his human subjects.  Thereafter, they were known as the
                  Myrmidons.  See "The Iliad" for Homers' account of the Myrmidons
                  during the Trojan War.</i>
              </quote>
                      </blockquote>
      </td></tr>
    </table>
                </td>
          </tr>
  
          <!-- FOOTER -->
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          <tr><td colspan="2">
            <div align="center"><font color="#525D76" size="-1"><em>
            Copyright &#169; 2000-2002, Apache Software Foundation
            </em></font></div>
          </td></tr>
        </table>
      </body>
    </html>
  <!-- end the processing -->
  
  
  
  
  
  
  
  1.1                  jakarta-ant-myrmidon/site/docs/librarys.html
  
  Index: librarys.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  
  <!-- Content Stylesheet for Site -->
  
      
  <!-- start the processing -->
      <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    
                        <meta name="author" value="Peter Donald">
    <meta name="email" value="peter@apache.org">
          
        <title>Apache Myrmidon - On Libraries in Ant 2</title>
      </head>
    
      <body bgcolor="#ffffff" text="#000000" link="#525D76">    
        <table border="0" width="100%" cellspacing="0">
          <!-- TOP IMAGE -->
          <tr>
            <td>      <td colspan="2">
      <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a>
      </td>
    </td>
            <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></td>
          </tr>
        </table>
        <table border="0" width="100%" cellspacing="4">
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          
          <tr>
            <!-- LEFT SIDE NAVIGATION -->
            <td valign="top" nowrap="true">
                  <p><strong>Myrmidon</strong></p>
      <ul>
            <li>      <a href="./index.html">Introduction</a>
    </li>
            <li>      <a href="./getinvolved.html">Get Involved</a>
    </li>
            <li>      <a href="./user.html">Building Myrmidon</a>
    </li>
            <li>      <a href="./todo.html">Todo List</a>
    </li>
          </ul>
        <p><strong>User Guide</strong></p>
      <ul>
            <li>      <a href="./buildfile.html">Project File</a>
    </li>
            <li>      <a href="./vfs.html">Virtual File System</a>
    </li>
            <li>      <a href="./ant1compat.html">Ant 1 Compatibility Layer</a>
    </li>
            <li>      <a href="./differences.html">Differences to Ant 1</a>
    </li>
            <li>      <a href="./task.html">My First Task</a>
    </li>
          </ul>
        <p><strong>Extending Ant</strong></p>
      <ul>
            <li>      <a href="./configuring.html">Configuration HOWTO</a>
    </li>
            <li>      <a href="./converter.html">Converter HOWTO</a>
    </li>
            <li>      <a href="./type.html">Type HOWTO</a>
    </li>
            <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
    </li>
            <li>      <a href="./librarys.html">Library HOWTO</a>
    </li>
          </ul>
        <p><strong>Container Design</strong></p>
      <ul>
          </ul>
              </td>
            <td align="left" valign="top">
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Library Management"><strong>Library Management</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Long ago there was identified the need for libraries that contain
              tasks and other elements present in the build file. This document
              attempts to describe the mechanism via which these libraries will be
              defined and used in Ant 2. The libraries (also referred to as
              deployments) will be termed antlibs.</p>
                                  <p>Ant libraries can be packaged and signed into a ANt Type Library
              format (.atl) using the standard Java Archive tools. (For details on
              the .jar file format see the
  
                  <a href="http://java.sun.com/j2se/1.3/docs/guide/jar/index.html">
                             Jar Specification</a>.
              </p>
                                  <p>When packaged into such a form the META-INF/ directory contains
              ant specific descriptors in addition to the standard Jar manifest
              and other descriptor files. The archive will also contain the
  
                  <code>.class</code> files for all the tasks and other types the
              library defines. It may also contain additional resources that can
              be referenced in the build file (an example being DTDs).
              </p>
                                  <p>The library may also need access to other libraries or resources
              to perform its job. For instance, if the task loaded an XML document
              and then processed said document using the
                  <em>Trax API</em> then
              the Ant library needs to have access to the
                  <em>Trax API</em> and an
              implementation of the API. The Antlib mechanism thus uses the standard
              "Optional Package" Specification to declare dependencies on other
              libraries.
              </p>
                                  <p>The libraries will usually be installed in standard locations that
              make it possible for the Ant container to automatically locate and scan
              the libraries. It will also be possible for the users to specify
              additional search locations or even the specific location of ant
              libraries.</p>
                                  <p>The following sections will describe each of these different facets
              in greater detail.</p>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Descriptors"><strong>Descriptors</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>FIXME: Import this part from other doco</p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Class and Resource Files"><strong>Class and Resource Files</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>The class and resources files should be stored as in standard jars. The
                  root directory being the base via which code and resources are loaded. So
                  the
                      <code>.class</code> file for the Java class
                      <code>com.biz.tasks.Mytask</code>
                  would be stored in
                      <code>/com/biz/tasks/Mytask.class</code>
                  </p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Dependencies"><strong>Dependencies</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>It is often the case that a library will need external resources. The
                  example given above described dependence on an external XML library. The
                  ant library thus needs a mechanism via which to declare dependencies on
                  external libraries.</p>
                                  <p>Ant 2 uses the "Optional Package" mechanism. Prior to JDK1.3, an "Optional
                  Package" was known as an
                      <em>Extension</em>. The specification for this
                  mechanism is available in the JDK1.3 documentation in the directory
  
                      <code>$JDK_HOME/docs/guide/extensions/versioning.html</code>. Alternatively
                  it is available online at
  
                      <a href="http://java.sun.com/j2se/1.3/docs/guide/extensions/versioning.html">
                                     http://java.sun.com/j2se/1.3/docs/guide/extensions/versioning.html</a>.
                  </p>
                                  <p>This mechanism was adopted as it is an established standard. The standard
                  is also begining to be adopted by other specifications such as the
                      <em>Servlet
                                     2.3 API</em>. Thus we are likely to see an increase of jars using this mechanism
                  to specify dependencies.
                  </p>
                                  <p>The "Optional Package" mechanism allows jars to specify dependencies on other
                  jars that implement a particular specification at particular version levels. For
                  example you could specify a dependency on the Trax 1.1 API by adding the following
                  to the manifest of your jar.</p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>
  Extension-List: trax
  trax-Extension-Name: Java API for XML Parsing
  trax-Specification-Version: 1.1
                  </pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
                                  <p>In some cases you may also wish to specify a dependency on a specific vendors
                  implementation. For instance you may need to use xalan due to it implementing a
                  particular extension you need. In that case you manifest may contain;</p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>
  Extension-List: trax
  trax-Extension-Name: Java API for XML Parsing
  trax-Specification-Version: 1.1
  trax-Implementation-Title: org.apache.xalan.xslt
  trax-Implementation-Version: 2.1.0
  trax-Implementation-Vendor: Apache Software Foundation
                  </pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
                                  <p>In many cases there will be no distinction between the specification and
                  the implementation of a library. For instance the Velocity project only has
                  one implementation and one specification. In which case it is sufficient to
                  just declare a dependency on the Velocity "Specification". A library that uses
                  both the Trax API and the Velocity project may look like;</p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>
  Extension-List: trax velocity
  velocity-Extension-Name: org.apache.velocity
  velocity-Specification-Version: 1.0
  trax-Extension-Name: Java API for XML Parsing
  trax-Specification-Version: 1.1
  trax-Implementation-Title: org.apache.xalan.xslt
  trax-Implementation-Version: 2.1.0
  trax-Implementation-Vendor: Apache Software Foundation
                  </pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
                                  <p>To make other jars available to Ant libraries as "Optional Packages"
                  or Extensions then you need to add a few lines to the manifest of the
                  other jar. The minimal manifest is the following;</p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>
  Extension-Name: org.realityforge.dve
  Specification-Vendor: Peter Donald
  Specification-Version: 1.0
                  </pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
                                  <p>It is important to note that looking for dependencies is recursive. For example,
                  if the ant library depends upon jar A and and A depends on B then both A and B will
                  need to be loaded by the container.</p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Implementation Notes"><strong>Implementation Notes</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>So far there has been no mention of implementation strategies for
                  managing ClassLoaders and other details about where the "Optional Packages"
                  are stored. This section will outline such details but they could change
                  in the future. The above specification will still be accurate but the approach
                  to implementing specification will be different.</p>
                                  <p>In the current architecture all of the "Optional Packages" are assumed to
                  be stored in the
                      <code>$ANT_HOME/ext</code> directory. The runtime will scan
                  this directory for jars and add all the "optional Packages" found into a
                  registry. This registry will be used by the library loading mechanism to locate
                  all the "Optional Packages". The user is able to specify an alternative directory
                  or add a new directory to search on the commandline.
                  </p>
                                  <p>When the container attempts to load an ant library it will also try to load
                  any needed dependencies. First it will check the parent ClassLoaders to see if any
                  of them contain the required dependencies. If not then it will search the
                  "Optional Packages" registry. If the dependency is not found then a error will be
                  signaled. If the dependency is found in the "Optional Packages" registry then it is
                  loaded by the same ClassLoader that is used to load the Ant library.</p>
                      </blockquote>
      </td></tr>
    </table>
                      </blockquote>
      </td></tr>
    </table>
                </td>
          </tr>
  
          <!-- FOOTER -->
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          <tr><td colspan="2">
            <div align="center"><font color="#525D76" size="-1"><em>
            Copyright &#169; 2000-2002, Apache Software Foundation
            </em></font></div>
          </td></tr>
        </table>
      </body>
    </html>
  <!-- end the processing -->
  
  
  
  
  
  
  
  1.1                  jakarta-ant-myrmidon/site/docs/task.html
  
  Index: task.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  
  <!-- Content Stylesheet for Site -->
  
      
  <!-- start the processing -->
      <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    
                        <meta name="author" value="Peter Donald">
    <meta name="email" value="peter@apache.org">
          
        <title>Apache Myrmidon - My First Task</title>
      </head>
    
      <body bgcolor="#ffffff" text="#000000" link="#525D76">    
        <table border="0" width="100%" cellspacing="0">
          <!-- TOP IMAGE -->
          <tr>
            <td>      <td colspan="2">
      <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a>
      </td>
    </td>
            <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></td>
          </tr>
        </table>
        <table border="0" width="100%" cellspacing="4">
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          
          <tr>
            <!-- LEFT SIDE NAVIGATION -->
            <td valign="top" nowrap="true">
                  <p><strong>Myrmidon</strong></p>
      <ul>
            <li>      <a href="./index.html">Introduction</a>
    </li>
            <li>      <a href="./getinvolved.html">Get Involved</a>
    </li>
            <li>      <a href="./user.html">Building Myrmidon</a>
    </li>
            <li>      <a href="./todo.html">Todo List</a>
    </li>
          </ul>
        <p><strong>User Guide</strong></p>
      <ul>
            <li>      <a href="./buildfile.html">Project File</a>
    </li>
            <li>      <a href="./vfs.html">Virtual File System</a>
    </li>
            <li>      <a href="./ant1compat.html">Ant 1 Compatibility Layer</a>
    </li>
            <li>      <a href="./differences.html">Differences to Ant 1</a>
    </li>
            <li>      <a href="./task.html">My First Task</a>
    </li>
          </ul>
        <p><strong>Extending Ant</strong></p>
      <ul>
            <li>      <a href="./configuring.html">Configuration HOWTO</a>
    </li>
            <li>      <a href="./converter.html">Converter HOWTO</a>
    </li>
            <li>      <a href="./type.html">Type HOWTO</a>
    </li>
            <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
    </li>
            <li>      <a href="./librarys.html">Library HOWTO</a>
    </li>
          </ul>
        <p><strong>Container Design</strong></p>
      <ul>
          </ul>
              </td>
            <td align="left" valign="top">
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="My First Task"><strong>My First Task</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>In Ant 1 it was very easy to write your own task. In Ant 2 we plan
  to make it even easier. To write a basic task simply follow the following
  formula.</p>
                                  <ol>
    <li>
      Create a Java class that extends
      <code>org.apache.myrmidon.api.AbstractTask</code>
    </li>
    <li>
      For each attribute, write a setter method. The setter method
      must be a public void method that takes a single argument. The name
      of the method must begin with "set", followed by the attribute name, with
      the first character of the name in uppercase, and the rest in lowercase.
      The type of the attribute can be:
      <ul>
        <li>String</li>
        <li>
          Any primitive type - they are converted for you from their
          String-representation in the buildfile
        </li>
        <li>
          File - the string representation will be interpreted relative to
          the project's basedir.
        </li>
      </ul>
    </li>
    <li>
      For each nested element create a public void method that takes a single
      argument. The name of the method must begin with "add", followed by the
      attribute name, with the first character of the name in uppercase, and
      the rest in lowercase. The type of the parameter is an object with a
      no-arguement constructor. It is configured in exactly the same was a
      task is configured (via setters and adders) and then added to the task.
    </li>
    <li>
      Write a public void method named "execute" with no arguments that
      throws a TaskException. This is the method called to do the
      actual work of the task.
    </li>
  </ol>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="A Basic Example"><strong>A Basic Example</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>So a basic task that has one attribute named "message" and just prints
  out this message is as simple as;</p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>
  package org.realityforge.tasks;
  
  import org.apache.myrmidon.api.AbstractTask;
  import org.apache.myrmidon.api.TaskException;
  
  public class SystemOutPrinterTask
      extends Task
  {
      private String m_message;
  
      // The setter for the &quot;message&quot; attribute
      public void setMessage( final String message )
      {
          m_message = message;
      }
  
      // The method executing the task
      public void execute()
          throws TaskException
      {
          System.out.println( m_message );
      }
  }
  </pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
                                  <p>To use this task you <em>could</em> create a library but instead we will
  just use &lt;taskdef&gt; to define the task. An example usage would be;</p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>
  
  
  &lt;?xml version=&quot;1.0&quot;?&gt;
  
  &lt;project version=&quot;2.0&quot;&gt;
  
    &lt;target name=&quot;main&quot;&gt;
      &lt;taskdef name=&quot;printer&quot;
               classname=&quot;org.realityforge.tasks.SystemOutPrinterTask&quot;
               classpath=&quot;build/classes&quot;/&gt;
  
      &lt;printer message=&quot;Hello World!&quot;/&gt;
    &lt;/target&gt;
  &lt;/project&gt;
  
  
  </pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
                      </blockquote>
      </td></tr>
    </table>
                      </blockquote>
      </td></tr>
    </table>
                </td>
          </tr>
  
          <!-- FOOTER -->
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          <tr><td colspan="2">
            <div align="center"><font color="#525D76" size="-1"><em>
            Copyright &#169; 2000-2002, Apache Software Foundation
            </em></font></div>
          </td></tr>
        </table>
      </body>
    </html>
  <!-- end the processing -->
  
  
  
  
  
  
  
  1.1                  jakarta-ant-myrmidon/site/docs/todo.html
  
  Index: todo.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  
  <!-- Content Stylesheet for Site -->
  
      
  <!-- start the processing -->
      <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    
                        <meta name="author" value="Adam Murdoch">
    <meta name="email" value="adammurdoch@apache.org">
                  <meta name="author" value="Peter Donald">
    <meta name="email" value="peter@apache.org">
          
        <title>Apache Myrmidon - Get Involved</title>
      </head>
    
      <body bgcolor="#ffffff" text="#000000" link="#525D76">    
        <table border="0" width="100%" cellspacing="0">
          <!-- TOP IMAGE -->
          <tr>
            <td>      <td colspan="2">
      <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a>
      </td>
    </td>
            <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></td>
          </tr>
        </table>
        <table border="0" width="100%" cellspacing="4">
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          
          <tr>
            <!-- LEFT SIDE NAVIGATION -->
            <td valign="top" nowrap="true">
                  <p><strong>Myrmidon</strong></p>
      <ul>
            <li>      <a href="./index.html">Introduction</a>
    </li>
            <li>      <a href="./getinvolved.html">Get Involved</a>
    </li>
            <li>      <a href="./user.html">Building Myrmidon</a>
    </li>
            <li>      <a href="./todo.html">Todo List</a>
    </li>
          </ul>
        <p><strong>User Guide</strong></p>
      <ul>
            <li>      <a href="./buildfile.html">Project File</a>
    </li>
            <li>      <a href="./vfs.html">Virtual File System</a>
    </li>
            <li>      <a href="./ant1compat.html">Ant 1 Compatibility Layer</a>
    </li>
            <li>      <a href="./differences.html">Differences to Ant 1</a>
    </li>
            <li>      <a href="./task.html">My First Task</a>
    </li>
          </ul>
        <p><strong>Extending Ant</strong></p>
      <ul>
            <li>      <a href="./configuring.html">Configuration HOWTO</a>
    </li>
            <li>      <a href="./converter.html">Converter HOWTO</a>
    </li>
            <li>      <a href="./type.html">Type HOWTO</a>
    </li>
            <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
    </li>
            <li>      <a href="./librarys.html">Library HOWTO</a>
    </li>
          </ul>
        <p><strong>Container Design</strong></p>
      <ul>
          </ul>
              </td>
            <td align="left" valign="top">
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Todo List"><strong>Todo List</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>The broad goal is to grow Myrmidon from a prototype task engine into a fully
              fledged build system, that can serve as the basis for Ant 2.  The following
              sections describe some of the many things which still need to be done to
              achieve that goal.  This list is currently under construction.</p>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Integrate XDocs proposal"><strong>Integrate XDocs proposal</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Integrate with the XDocs proposal that generates XML documentation for
                  tasks. Rework that proposal so that it knows about the Myrmidon specific
                  patterns and features. Also rework it so that it can support reading
                  documentation and examples from side-by-side the task.</p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="TaskInfo"><strong>TaskInfo</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Consider allowing task writers to write their own TaskInfo objects
                  (or at least have them generated from XDoclet directives). This would
                  encompass both documentation and perhaps introspection of the types.</p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="XML Catalog to load XML Fragments"><strong>XML Catalog to load XML Fragments</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>
                    When including fragments of XML we are currently forced to use relative paths.
                    However this is sometimes undesirable when a single fragment needs to be used
                    across several projects in several different locations. Instead we could use
                    a Catalog to name the fragment and then each developer would only need to install
                    the fragment once and it would be accessible from all the projects.
                  </p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Refactor Java Infrastructure into a Service"><strong>Refactor Java Infrastructure into a Service</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Much like Exec should be decoupled from Ant runtime, so should classes
                  to implement java task for the same benefits.</p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Structural Dependency Utils"><strong>Structural Dependency Utils</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>
                    In the present ant, it is required that each task manage dependency separately.
                    This makes it a lot of work to implement even simple dependency checking. To this
                    day many of the core tasks do not implement it correctly. I am specifically
                    talking about "structural" dependency information. The main reason is that it is
                    painful to implement.
                  </p>
                                  <p>
                    Some tasks do no dependency checking and will recompile/transform/etc everytime.
                    Others may perform a simple dependency checking (ie if source file is newer than
                    destination file then recompile). Ideally a dependency system would actually
                    calculate the dependencies correctly. So we need to have some mechanism to determine
                    that <code>foo.c</code> actually depends upon <code>foo.h</code>, <code>bar.h</code>
                    and <code>baz.h</code>. As this information is particular to each different task
                    we need to allow tasks to implement this behaviour. Possibly by supplying an interface
                    of the form;
                  </p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>
  public interface DependencyGenerator
  {
    File[] generateDependencies( File file );
  }
  </pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
                                  <p>
                    Generating the dependency information is a costly operation and thus we do not want to
                    be doing it everytime you run ant. We want to generate it on the initial build and then
                    persist somewhere. Everytime a file is out of date, it's dependency information would
                    be regenerated and stored in the dependency cache. Ideally this cache would also store the
                    above mentioned coloring information. So the entry for <code>foo.c</code> may declare that
                    it is dependent upon <code>foo.h</code>, <code>bar.h</code> and <code>baz.h</code>, aswell
                    as being compiled with -O2 flag. If any of the dependencies have changed or are out of date
                    then foo.c would need to be recompiled.
                  </p>
                                  <p>
                    A possible API would be
                  </p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>
  DependencyManager dm = ...;
  dm.setFileSet( myFileSet );
  dm.setDependencyCache( myDependencyCacheFile );
  File[] files = cm.getOutOfDate();
  </pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Antlibs storing templates"><strong>Antlibs storing templates</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>After a templating system is formalized it would useful to define
                  a mechanism via which you can store templates in an antlib. These
                  templates could then be loaded and used by build files through a
                  "standard" mechanism. This may need to be merged with the XML catalog
                  system.</p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Antlibs Storing General Resources"><strong>Antlibs Storing General Resources</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Add a system via which ant libs can store general resources for
                  consumption by build users. This could be used to store the XML fragments
                  for the XML catalog, the template fragments for templates, images for
                  documentation system and so forth.</p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Coloring API"><strong>Coloring API</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>
                    When you execute a task such as "javac" there is two types of dependency information
                    that is important to analyze before we determine if we need to recompile a file. Say
                    we are compiling <code>Foo.java</code>, it may depend on the <code>Bar.java</code>
                    file. We call this "structural" dependency information - the structure of the source file
                    determines what other files it depend upon. However there is also "environmental"
                    dependency information. For instance if the <code>Foo.java</code> file was compiled with
                    <code>debug="true"</code> last run and this time needs to be compiled with
                    <code>debug="false"</code> then it is out of date and needs to be recompiled. We call this
                    "environmental" dependency information "coloring".
                  </p>
                                  <p>
                    So we need to create an infrastructure that allows tasks to manage "coloring". So a task
                    should be able to add coloring information for each resource processed. When the task
                    comes to process the resource again it will detect if the coloring has changed and if it
                    has will force a recompile.
                  </p>
                                  <p>
                    An API for such a bean has yet to be established but an example API would be.
                  </p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>
  ColoringManager cm = ...;
  cm.addColor( &quot;debug&quot;, &quot;true&quot; );
  cm.addColor( &quot;optimize&quot;, &quot;false&quot; );
  cm.setFileSet( myFileSet );
  File[] files = cm.getOutOfDate();
  </pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Create Task/Element/Attribute Naming guidelines"><strong>Create Task/Element/Attribute Naming guidelines</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p> Currently Ant has a mixture of tasks from various stages it's evolution, with different
                  authors and each utilizing different naming patterns. Some tasks use names such as
                  "src" and "dest" while others use "file" and "tofile". It would be preferrable if
                  consistent naming patterns were used. It is recomended that we come up with a "best
                  practices" document to document our recomended naming patterns.</p>
                                  <p>Before we can come up with such a document we need to identify common patterns through
                  out the tasks. Several tasks have the notion of transforming input from a "source"
                  to a "destination". So we should have consistent naming schemes for these attributes and
                  elements. Analysis of existing tasks will likely bring out other similar patterns. Once
                  we have identified and documented these similarities then we can establish conventions.</p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Rethink Notification/Event scheme"><strong>Rethink Notification/Event scheme</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>We need to rethink the whole notificaiton scheme. Should tasks be able to
                  raise events? Probably as long as we have <em>ContainerTasks</em>. Should tasks
                  be able to query state of run? ie Can a task request "are we paused?" or "are we
                  stopped?" ? Probably as that way long running tasks are given the opportunity
                  to be gracefully halted by the end users (primarily aimed at IDE vendors here).</p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="XPath-like Locators for tasks"><strong>XPath-like Locators for tasks</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Most tasks are grouped into some sort of task container. The task containers
                  can be things like workspaces, projects, targets or other tasks. Each of these
                  containers usually has a name. Thus we could refer to tasks via a path such as
                  "/avalon/compile/javac" would refer to the task "javac" in the target "compile"
                  in the project "avalon". In the past it has been requested that a task get access
                  to this path programatically - other people have also asked for access to things
                  like the currently running target. We need to assess this and decide whether we
                  wish to support it.</p>
                                  <p>Another point to think about is that we could use XPath-like string to designate
                  to other tasks to execute. ie antcall would refer to a path rather than a target name</p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Embeddor HOWTO"><strong>Embeddor HOWTO</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Assigned To: Peter</p>
                                  <p>Write a HOWTO describing how to embed Myrmidon into other
                  applications.</p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Optional Dependencies"><strong>Optional Dependencies</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Assigned To: Peter</p>
                                  <p>Extend Myrmidons library management facilities so that optional
                  dependencies may be declared for a library. ie The library will still
                  operate in absence of such libraries but can provide further features
                  if these libraries are present. Most likely this will be done via a
                  new manifest entry "Optional-Extension-List:" that behaves similar
                  to "Extension-List:" except that the extensions are optional.</p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Facade task HOWTO"><strong>Facade task HOWTO</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Currently we have a few tasks that have multiple implementations. For instance
                  Javac task can actually call jikes, jvc, classic javac or modern javac. Similar things
                  will be seen with the jspc task and the cc task (if it ever gets written). We have a base
                  class that is meant to facilitate this sort of task and make it easy to develope. See
                  AbstractFacadeTask. However we need to write up a HOWTO so people can use it.</p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Mail tasks"><strong>Mail tasks</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Convert the Ant 1.x Mail tasks to Myrmidon.</p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Security Manager"><strong>Security Manager</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Add the ability to run java programs that call System.exit() by adding a
                  security manager. Should look something like:</p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>
  public class MyrmidonSecurityManager
      extends SecurityManager
  {
      public void checkExit( final int status )
      {
          throw new ExitException( status );
      }
  
      public void checkPermission( final Permission permission )
      {
      }
  }
                  </pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Self Hosting"><strong>Self Hosting</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Myrmidon must be able to build itself.  Currently, it is built using
                  Ant 1.x.  Ultimately, Myrmidon should be able to build itself from exactly the
                  same build file.  To start with, however, there is no need for Myrmidon to be
                  able to do this.  Myrmidon should also be able to be bootstrapped (that is, be
                  able to be built from scratch, without using Ant 1.x at all).</p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Validation Pass"><strong>Validation Pass</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Consider calling validate() on task prior to execute(). This would allow
                  us to have a "make -k" mode that actually did basic validation and would also
                  encourage task writers to do validation properly.</p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Paths"><strong>Paths</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Consider allowing the user to configure the ant system by setting the
                  following path types.</p>
                                  <ul>
                      <li>ant.type.path: path that is used to search for the type libraries</li>
                      <li>ant.ext.path: path that is used to search for "Optional Packages"
                      or extensions.</li>
                  </ul>
                                  <p>
                  The default search path will probably include a per-user path element,
                  a workspace path element and a system path elemtn that are searched in
                  that order. Some possible defaults;
                  </p>
                                  <ul>
                      <li>Unix Per-user: ${user.home}/.ant/lib, ${user.home}/.ant/ext</li>
                      <li>Windows Per-user: ${user.home}/ant/lib, ${user.home}/ant/ext</li>
                      <li>MacOSX Per-user: ${user.home}/Library/Ant/lib,
                      ${user.home}/Library/Ant/ext</li>
                      <li>Unix System-wide: /opt/ant/lib, /opt/ant/ext</li>
                      <li>Unix System-wide: /usr/local/ant/lib, /usr/local/ant/ext</li>
                      <li>Windows System-wide: %SYS_DRIVE%/Program Files/ant/lib,
                      %SYS_DRIVE%/Program Files/ant/ext</li>
                      <li>MacOSX System-wide: /Library/Ant/lib, /Library/Ant/ant/ext</li>
                  </ul>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Ant 1.x Compatibility"><strong>Ant 1.x Compatibility</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>The Ant 1 Compatibility layer is still in early stages of development.
                  </p>
                                  <ul>
                      <li>Get a version of <code>&lt;antcall&gt;</code> working.</li>
                      <li>
                      Provide hooks between Ant 1 references and Myrmidon properties.
                      May use converters for adapting Ant 2 objects (like Ant 2
                      <code>&lt;path&gt;</code> or <code>&lt;fileset&gt;</code>)
                      as Ant 1 types.
                      </li>
                      <li>
                      Missing tests:
                      <ul>
                          <li>Make sure properties are shared between Ant 1 and Myrmidon tasks.</li>
                      </ul>
                      </li>
                      <li>Get GUMP runs going using Myrmidon.</li>
                      <li>Add protected accessors for get/set/list properties in
                      Ant 1 Project, to minimise the amount of code duplication in
                      Ant1CompatProject.</li>
                  </ul>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Virtual File System"><strong>Virtual File System</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>The VFS needs plenty of work:</p>
                                  <ul>
                      <li>Move files/folders.</li>
                      <li>Recursive folders copy.</li>
                      <li>Search through a file hierarchy, using Ant-style wildcards.</li>
                      <li>Search through a file hierarchy, using a Selector interface.</li>
                      <li>The in-memory caching mechanism is pretty rudimentary at this stage.
                      It needs work to make it size capped.  In addition, some mechanism needs
                      to be provided to release and refresh cached info.
                      </li>
                      <li>Convert files/folders into local files, for handing off
                      to external commands, or legacy tasks.</li>
                      <li>Refactor the replication mechanism out of ZipFileSystemProvder,
                      and make more general pluggable.</li>
                      <li>Capabilities discovery.</li>
                      <li>Attributes and attribute schema.</li>
                      <li>Handle file canonicalisation better (for cases like case-insensitive
                      file systems, symbolic links, name encoding, etc).</li>
                      <li>File system layering.  That is, the ability for a file system to
                      sit on top of another file system, or a file from another file system
                      (e.g. Zip/Jar/Tar file systems, gzip/encoding file systems, virtual file
                      systems).
                      </li>
                  </ul>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="File Data-Types and Tasks"><strong>File Data-Types and Tasks</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>The file data-types, such as
                      <code>&lt;fileset&gt;</code> and
  
                      <code>&lt;path&gt;</code>, are some of the most widely used parts of Ant 1.x.
                  Unfortunately, they aren't particularly extensible.
                  </p>
                                  <ul>
                      <li>Redesign the file data-types, replacing them with an interface-based
                      API, plus a set of implementations.  The API should use the VFS file
  
                          <code>FileObject</code>, rather than
                          <code>java.io.File</code>.
                      This process has started, in the
                          <code>antlib.vfile</code> package.
  
                      </li>
                      <li>File Selectors:
  
                          <ul>
                              <li>Change
                                  <code>AbstractNameFileSelector</code> to use Ant 1 style patterns
                              matches, rather than Globs patterns.
                              </li>
                              <li>Add 'defaultexcludes' to
                                  <code>DefaultFileSet</code>.  Also add a
                              file selector implementation that matches everything except the default
                              excludes.
                              </li>
                              <li>Add a name selector that loads patterns from a file.</li>
                              <li>Add more selector implementations: size and last-modified comparisons,
                              checksum comparison, byte-wise content comparison.</li>
                          </ul>
                      </li>
                      <li>File conditions:
  
                          <ul>
                              <li>Add more condition implementations that perform checks on files.
                              One that searches a path for a file would be useful.</li>
                          </ul>
                      </li>
                      <li>File Name Mappers:
  
                          <ul>
                              <li>Change FileNameMapper.mapFileName() to take vfs.FileName objects.</li>
                              <li>Move the current mapper implementations across to antlib.</li>
                          </ul>
                      </li>
                      <li>File Sets:
  
                          <ul>
                              <li>Add a file set implementation that provides the union of several
                              nested file sets (that is, a file set that merges several file sets
                              together).</li>
                              <li>Add a file set implementation that filters files that are up-to-date
                              WRT some other file.  Alternatively, this might be better done as a
                              file selector.</li>
                          </ul>
                      </li>
                      <li>Paths:
  
                          <ul>
                              <li>Add path implementations that evaluate to the system classpath,
                              and the ant runtime classpath.  Or, more generally, combine this with
  
                                  <code>ClassLoaderManager</code> to evaluate to the classpath of any
                              'library' (e.g. system classpath, ant runtime, tools.jar,
                              an antlib, an installed extension, or the system classes of another JVM
                              for cross-compiling).
                              </li>
                          </ul>
                      </li>
                      <li>Port across the Ant 1 file filter proposal, once it is complete.</li>
                      <li>Copy task:
  
                          <ul>
                              <li>Implement 'preservelastmodified', 'overwrite', and 'includeemptydirs'.</li>
                              <li>Support a file name mapper.</li>
                              <li>Support file filters.</li>
                              <li>Detect and handle destination file name collisions.</li>
                          </ul>
                      </li>
                      <li>Implement the
                          <code>&lt;move&gt;</code>,
                          <code>&lt;delete&gt;</code>,
  
                          <code>&lt;touch&gt;</code> and
                          <code>&lt;mkdir&gt;</code> tasks on top
                      of the VFS and the new file data-types.  Might be some scope for generalising
                      'touch' and 'mkdir' into a single task.
                      </li>
                  </ul>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Command-line and Configuration Files"><strong>Command-line and Configuration Files</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>One of the goals of Ant 2 is to allow the user to easily customise and
                  extend Ant.  The command-line and local configuration files, are two places
                  where this would be done.  Currently, Myrmidon some customisation from the
                  command-line, but does not support configuration files.</p>
                                  <ul>
  
                      <li>Load configuration from system (from $ANT_HOME) and user (from $HOME)
                      configuration files.</li>
  
                      <li>Allow the following via config files:
  
                          <ul>
                              <li>Add (or override) the
                                  <code>lib</code> and
                                  <code>ext</code> directories.
                              </li>
                              <li>Enable more than one listener, and configure the listeners from
                              the conents of the config file.</li>
                              <li>Import libraries, and set properties.</li>
                              <li>Execute tasks.</li>
                              <li>Install and configure runtime services.</li>
                          </ul>
                      </li>
  
                  </ul>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Scripting"><strong>Scripting</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Add the ability to extend Ant using languages other than
                  Java:</p>
                                  <ul>
                      <li>Define a task using a scripting language such as Javascript.</li>
                      <li>Use Rhino's ability to implement Java interfaces, to
                      implement and define types, such as FileSelector, or
                      Condition.</li>
                      <li>Define a task using template.</li>
                      <li>Add some lightweight scripting tasks.</li>
                  </ul>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Documentation"><strong>Documentation</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Everyone loves writing documentation, and so a goal for Ant 2 is to
                  generate a lot of reference documentation for tasks and other types directly
                  from the source.  Unfortunately, there's still plenty of tutorial material
                  to write.  In particular we need these:</p>
                                  <ul>
                      <li>User documentation - describing things like the build file format,
                      how properties work, how to use references, how sub-builds work, how to customise
                      Myrmidon, and so on.</li>
  
                      <li>Task writer documentation - describing things like an overview the task API,
                      how configuration works, task lifecycle, how to assemble an antlib, a catalog
                      of the runtime services, and so on.</li>
  
                      <li>Myrmidon developer documentation - a broad outline of the architecture,
                      how to build, how to test, and so on.  Also, this todo list needs plenty
                      of filling out.</li>
  
                  </ul>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Miscellaneous"><strong>Miscellaneous</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>A completely unordered list of items, big and small:</p>
                                  <ul>
                      <li>Search through the code for 'TODO' items and fix them.</li>
                      <li>Allow service factories to be configured from the contents of the
  
                          <code>ant-services.xml</code> descriptor.
                      </li>
                      <li>Add verbosity level to ProjectListener LogEvent</li>
                      <li>Fire ProjectListener events taskFinished(), targetFinished() and
                      projectFinished() events on build failure, adding indicator methods to
                      ProjectEvent.</li>
                      <li>Fire ProjectListener events projectStarted() and projectFinished()
                      events on start and finish of referenced projects, adding indicator methods
                      to ProjectEvent.</li>
                      <li>Detect duplicate type names.</li>
                      <li>Add fully qualified type names, based on antlib name and type shorthand name.
                      Allow these to be used in build files in addition to the shorthand names.</li>
                      <li>Move the
                          <code>&lt;http&gt;</code> and
                          <code>&lt;socket&gt;</code>
                      conditions to an antlib.  Need to resolve how these will be passed a logger.
                      </li>
                      <li>Add an else block to the
                          <code>&lt;if&gt;</code> task.
                      </li>
                      <li>Move
                          <code>crimson.jar</code> to
                          <code>bin/lib</code> in the distribution,
                      and make available to other jars via the extension mechanism.
                      </li>
                      <li>Change <code>DefaultPropertyResolver</code> to ignore '$${'.</li>
                      <li>Add a <code>--type</code> command-line option, to allow
                          the project builder to be manually selected.
                      </li>
                      <li>Change <code>ProjectBuilder</code>
                          and <code>Embeddor</code> to throw something more
                          specialised than Exception.
                      </li>
                      <li>Change <code>DefaultClassLoaderManager</code> to handle
                          directories as part of a library classpath.
                      </li>
                      <li><code>&lt;condition&gt;</code> should set the property
                          value to <code>false</code> when the condition is false.</li>
                      <li>Split the <code>&lt;uptodate&gt;</code> condition into
                          a condition that checks against a single target file,
                          and one which checks using a destdir/mapper.</li>
                      <li>Add condition implementations to: check JVM version,
                          check Ant version, check whether a particular antlib or extension is
                          available, match a string against a regular expression.</li>
                      <li>Add a task to unset a property.</li>
                      <li>Change the various def and import task to allow a classpath
                          to be provided.</li>
                      <li>Unit tests.</li>
                  </ul>
                      </blockquote>
      </td></tr>
    </table>
                      </blockquote>
      </td></tr>
    </table>
                </td>
          </tr>
  
          <!-- FOOTER -->
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          <tr><td colspan="2">
            <div align="center"><font color="#525D76" size="-1"><em>
            Copyright &#169; 2000-2002, Apache Software Foundation
            </em></font></div>
          </td></tr>
        </table>
      </body>
    </html>
  <!-- end the processing -->
  
  
  
  
  
  
  
  1.1                  jakarta-ant-myrmidon/site/docs/user.html
  
  Index: user.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  
  <!-- Content Stylesheet for Site -->
  
      
  <!-- start the processing -->
      <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    
                        <meta name="author" value="Adam Murdoch">
    <meta name="email" value="adammurdoch@apache.org">
          
        <title>Apache Myrmidon - User Guide</title>
      </head>
    
      <body bgcolor="#ffffff" text="#000000" link="#525D76">    
        <table border="0" width="100%" cellspacing="0">
          <!-- TOP IMAGE -->
          <tr>
            <td>      <td colspan="2">
      <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a>
      </td>
    </td>
            <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></td>
          </tr>
        </table>
        <table border="0" width="100%" cellspacing="4">
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          
          <tr>
            <!-- LEFT SIDE NAVIGATION -->
            <td valign="top" nowrap="true">
                  <p><strong>Myrmidon</strong></p>
      <ul>
            <li>      <a href="./index.html">Introduction</a>
    </li>
            <li>      <a href="./getinvolved.html">Get Involved</a>
    </li>
            <li>      <a href="./user.html">Building Myrmidon</a>
    </li>
            <li>      <a href="./todo.html">Todo List</a>
    </li>
          </ul>
        <p><strong>User Guide</strong></p>
      <ul>
            <li>      <a href="./buildfile.html">Project File</a>
    </li>
            <li>      <a href="./vfs.html">Virtual File System</a>
    </li>
            <li>      <a href="./ant1compat.html">Ant 1 Compatibility Layer</a>
    </li>
            <li>      <a href="./differences.html">Differences to Ant 1</a>
    </li>
            <li>      <a href="./task.html">My First Task</a>
    </li>
          </ul>
        <p><strong>Extending Ant</strong></p>
      <ul>
            <li>      <a href="./configuring.html">Configuration HOWTO</a>
    </li>
            <li>      <a href="./converter.html">Converter HOWTO</a>
    </li>
            <li>      <a href="./type.html">Type HOWTO</a>
    </li>
            <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
    </li>
            <li>      <a href="./librarys.html">Library HOWTO</a>
    </li>
          </ul>
        <p><strong>Container Design</strong></p>
      <ul>
          </ul>
              </td>
            <td align="left" valign="top">
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Building Myrmidon"><strong>Building Myrmidon</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>
  First, you will need to fetch the Myrmidon source from CVS.  The source
  can be found in the <code>proposal/myrmidon</code> directory of the
  Ant source tree.  You should check out the <code>jakarta-ant</code> CVS
  module, as described
  <a href="http://jakarta.apache.org/site/cvsindex.html">here</a>.
  </p>
                                  <p>
  To build Myrmidon, use the <code>build.xml</code> build script.  You will need
  to use Ant 1.4.1 or later.  The default target builds the Myrmidon distribution
  into the <code>dist</code> directory.  The distribution is a ready-to-run
  installation of Myrmidon.
  </p>
                                  <p>There are a number features that are not built unless the appropriate optional Jar
  files are found in the <code>lib</code> directory:</p>
                                    <table>
                <tr>
                    <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Feature
          </font>
    </td>
                        <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Jar File
          </font>
    </td>
                        <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Download From
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            SMB VFS support (Samba, Windows shares)
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            jcifs.jar
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            <a href="http://jcifs.samba.org">jcifs.samba.org</a>.
          <p>Note: there are problems using the 0.6.1 release.  Try 0.6.0 instead.</p>
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            FTP VFS support
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            netcomponents.jar
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            <a href="http://www.savarese.org/oro/software/NetComponents.html">www.savarese.org</a>
          </font>
    </td>
        </tr>
          </table>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Running Myrmidon"><strong>Running Myrmidon</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>
  To run Myrmidon, use one of the following methods:
  </p>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Launcher Script"><strong>Launcher Script</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>
  On Windows and Unix platforms, you can use the <code>ant</code> script
  in the distribution's <code>bin</code> directory.  The following environment
  variables can be used, but are not required (except on Windows 9x - see below).
  </p>
                                  <p>
  
  </p>
                                    <table>
                <tr>
                    <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Variable
          </font>
    </td>
                        <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Description
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            JAVA_HOME
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            The directory that the JDK is installed in.
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            JAVACMD
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            The command to use to start the JVM.  Defaults to <code>java</code>.
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            ANT_HOME
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            
              The directory containing the Myrmidon distribution.  This must be
              set when running on Windows 95, 98 or Me.
          
          </font>
    </td>
        </tr>
          </table>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Executable Jar File"><strong>Executable Jar File</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>
  The Myrmidon distribution includes an executable Jar file, which can be used
  to run Myrmidon.  Use the following command:
  </p>
                                  <pre>
  prompt&gt; <i>java</i> -jar <i>ant-home</i>/bin/myrmidon-launcher.jar <i>options</i>
  </pre>
                      </blockquote>
      </td></tr>
    </table>
                                  <p>When started, Myrmidon looks for a project file called <code>build.ant</code>
  in the current directory.  A different project file can be specified using the
  <code>-f</code> command-line option.  Myrmidon executes the targets that are
  listed on the command-line, or the default target if none is given.  For
  example, the following command executes targets <code>clean</code> and
  <code>build</code> from project file <code>my-project.xml</code>:</p>
                                  <pre>
  prompt&gt; ant -f my-project.xml clean build
  </pre>
                                  <p>
  Run Myrmidon with the <code>-h</code> command-line option for a list of
  the command-line options that are available.
  </p>
                      </blockquote>
      </td></tr>
    </table>
                </td>
          </tr>
  
          <!-- FOOTER -->
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          <tr><td colspan="2">
            <div align="center"><font color="#525D76" size="-1"><em>
            Copyright &#169; 2000-2002, Apache Software Foundation
            </em></font></div>
          </td></tr>
        </table>
      </body>
    </html>
  <!-- end the processing -->
  
  
  
  
  
  
  
  1.1                  jakarta-ant-myrmidon/site/docs/vfs.html
  
  Index: vfs.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  
  <!-- Content Stylesheet for Site -->
  
      
  <!-- start the processing -->
      <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    
                        <meta name="author" value="Adam Murdoch">
    <meta name="email" value="adammurdoch@apache.org">
          
        <title>Apache Myrmidon - VFS User Guide</title>
      </head>
    
      <body bgcolor="#ffffff" text="#000000" link="#525D76">    
        <table border="0" width="100%" cellspacing="0">
          <!-- TOP IMAGE -->
          <tr>
            <td>      <td colspan="2">
      <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a>
      </td>
    </td>
            <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></td>
          </tr>
        </table>
        <table border="0" width="100%" cellspacing="4">
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          
          <tr>
            <!-- LEFT SIDE NAVIGATION -->
            <td valign="top" nowrap="true">
                  <p><strong>Myrmidon</strong></p>
      <ul>
            <li>      <a href="./index.html">Introduction</a>
    </li>
            <li>      <a href="./getinvolved.html">Get Involved</a>
    </li>
            <li>      <a href="./user.html">Building Myrmidon</a>
    </li>
            <li>      <a href="./todo.html">Todo List</a>
    </li>
          </ul>
        <p><strong>User Guide</strong></p>
      <ul>
            <li>      <a href="./buildfile.html">Project File</a>
    </li>
            <li>      <a href="./vfs.html">Virtual File System</a>
    </li>
            <li>      <a href="./ant1compat.html">Ant 1 Compatibility Layer</a>
    </li>
            <li>      <a href="./differences.html">Differences to Ant 1</a>
    </li>
            <li>      <a href="./task.html">My First Task</a>
    </li>
          </ul>
        <p><strong>Extending Ant</strong></p>
      <ul>
            <li>      <a href="./configuring.html">Configuration HOWTO</a>
    </li>
            <li>      <a href="./converter.html">Converter HOWTO</a>
    </li>
            <li>      <a href="./type.html">Type HOWTO</a>
    </li>
            <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
    </li>
            <li>      <a href="./librarys.html">Library HOWTO</a>
    </li>
          </ul>
        <p><strong>Container Design</strong></p>
      <ul>
          </ul>
              </td>
            <td align="left" valign="top">
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                      <a name="Handling Files"><strong>Handling Files</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Myrmidon includes a Virtual File System (VFS), which allows files from
              different sources to be treated identically.  The VFS currently supports
              the following file types:</p>
                                    <table>
                <tr>
                    <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            File System
          </font>
    </td>
                        <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Description
          </font>
    </td>
                        <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            URL Format
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Local Files
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Files on the local file system.
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Three different formats are currently supported for local file names:
                          <ul>
                              <li><code>file://</code> <i>absolute-file-name</i></li>
                              <li>Absolute file names</li>
                              <li>Relative file names.  These are resolved relative to the
                              project's base directory.
                              </li>
                          </ul>
                      
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Zip Files
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            The contents of Zip files (and Jar, War, and Ear files).
                      Currently, the VFS supports read-only access to Zip file contents.
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            <code>zip:</code> <i>zip-file-uri</i> [<code>!</code><i>absolute-path</i>]
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            FTP
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Files on an FTP server.
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            <code>ftp://</code> [[<i>password</i><code>:</code>] <i>username</i><code>@</code>] <i>hostname</i> [<code>:</code><i>port</i>] [<i>absolute-path</i>]
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            SMB
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Files on a CFIS server, such as Samba or Windows shares.
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            <code>smb://</code> [[<i>password</i><code>:</code>] <i>username</i><code>@</code>] <i>hostname</i> [<code>:</code><i>port</i>] [<i>absolute-path</i>]
          </font>
    </td>
        </tr>
          </table>
                                  <p>Both forward or backward slashes can be used to separate the elements of
              a URL.</p>
                                  <p>Here are some example URLs:</p>
                                  <ul>
                  <li><code>build/classes</code></li>
                  <li><code>c:\program files\ant\bin</code></li>
                  <li><code>file://C:/program files/ant</code></li>
                  <li><code>zip:build/lib/ant.jar!/org/apache/tools</code></li>
                  <li><code>ftp://adam@somehost/pub/downloads</code></li>
                  <li><code>smb://password:adam@somehost/home/adam</code></li>
              </ul>
                                  <p>Currently, there are only a handful of VFS aware tasks.  This will grow
              as more tasks are ported to the new API, and data types.</p>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="File Sets"><strong>File Sets</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>A file set in Myrmidon is more general than Ant 1's concept of a file set.
                  Firstly, there is more than one type of file set.  Secondly, they are VFS enabled.
                  File sets are automatically converted to a <a href="#Paths">path</a>, and so
                  can be used anywhere that a path can.</p>
                                  <h3><code>&lt;v-fileset&gt;</code></h3>
                                  <p>This is the equivalent of Ant 1's <code>&lt;fileset&gt;</code> (The name
                  is temporary, it will be changed to <code>&lt;fileset&gt;</code> once more
                  porting work as been completed).</p>
                                  <p>Rather than use a set of include and exclude patterns to choose the files
                  that make up the file set, <code>&lt;v-fileset&gt;</code> takes zero or more
                  <a href="#File Selectors">file selectors</a>.  File selectors can be used to
                  select files based on any attribute of the file, rather than just the name.
                  You can use <code>&lt;name&gt;</code> selectors to achieve the same result
                  as using includes or excludes.</p>
                                  <p>A <code>&lt;v-fileset&gt;</code> element takes the following attributes:</p>
                                    <table>
                <tr>
                    <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Attribute
          </font>
    </td>
                        <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Description
          </font>
    </td>
                        <td bgcolor="#039acc" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Default Value
          </font>
    </td>
        </tr>
                    <tr>
                    <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            dir
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            The base directory for the file set.  This can be any URL that the
                          VFS supports.
          </font>
    </td>
                        <td bgcolor="#a0ddf0" colspan="" rowspan="" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
            Required
          </font>
    </td>
        </tr>
          </table>
                                  <p>A <code>&lt;v-fileset&gt;</code> element takes any number of nested
                  <a href="#File Selectors">file selector</a> elements.  To be included in the
                  file set, a file must be selected by all the file selectors.  That is, the
                  file selectors are implicitly AND-ed together.  If no file selector is provided,
                  all the files and directories are included in the set.</p>
                                  <p>An example:</p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>
  
  &lt;v-fileset dir=&quot;src&quot;&gt;
      &lt;name pattern=&quot;org/apache/tools/ant/**&quot;/&gt;
      &lt;is-file/&gt;
  &lt;/v-fileset&gt;
  </pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
                                  <h3><code>&lt;flat-fileset&gt;</code></h3>
                                  <p>This file set takes a set of nested file sets and paths, and flattens them
                  into a single directory.  It can be used as a way of converting a path into a
                  file set.  It can also be used as a replacement for the <code>flatten</code>
                  attribute for the copy and move tasks.</p>
                                  <p>A <code>&lt;flat-fileset&gt;</code> element takes no attributes, and a set
                  of nested paths or file sets.</p>
                                  <p>An example:</p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>
  
  &lt;v-copy todir=&quot;dist/lib&quot;&gt;
    &lt;flat-fileset&gt;
      &lt;v-fileset dir=&quot;build/lib&quot;&gt;
        &lt;basename pattern=&quot;*.jar&quot;/&gt;
      &lt;v-fileset&gt;
      &lt;v-path path=&quot;${classpath}&quot;/&gt;
    &lt;/flat-fileset&gt;
  &lt;/v-copy&gt;
  </pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
                                  <h3><code>&lt;mapped-fileset&gt;</code></h3>
                                  <p>A fileset that applies a <a href="buildfile.html#File Name Mappers">file name mapper</a>
                      to a nested fileset.
                  </p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="Paths"><strong>Paths</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Paths are an ordered list of files.</p>
                                  <h3><code>&lt;v-path&gt;</code></h3>
                                  <p>This is the equivalent of Ant 1's <code>&lt;path&gt;</code>.</p>
                                  <h3><code>&lt;filtered-path&gt;</code></h3>
                                  <p>A path that applies file selectors to a set of nested file sets and paths.</p>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
                          <a name="File Selectors"><strong>File Selectors</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>File selectors are used to select files from file sets and paths.</p>
                                  <h3><code>&lt;and&gt;</code></h3>
                                  <p>Combines zero or more file selectors, using AND. An empty <code>&lt;and&gt;</code>
                  selector accepts all files.</p>
                                  <h3><code>&lt;basename&gt;</code></h3>
                                  <p>Selects files whose base name matches an Ant 1 style pattern, or a regular
                  expression.</p>
                                  <h3><code>&lt;condition&gt;</code></h3>
                                  <p>Takes a set of <a href="buildfile.html#Conditions">conditions</a>.  If
                  the conditions evaluate to true, then select every file.  Otherwise,
                  select no files.</p>
                                  <h3><code>&lt;exists&gt;</code></h3>
                                  <p>Selects files that exist.</p>
                                  <h3><code>&lt;is-empty-folder&gt;</code></h3>
                                  <p>Selects empty folders, that is, folders that have no children.</p>
                                  <h3><code>&lt;is-folder&gt;</code></h3>
                                  <p>Selects folders, does not select regular files.</p>
                                  <h3><code>&lt;is-file&gt;</code></h3>
                                  <p>Selects regular files, does not select folders.</p>
                                  <h3><code>&lt;name&gt;</code></h3>
                                  <p>Selects files whose path in a file set matches an Ant 1 style pattern, or
                  a regular expression.</p>
                                  <h3><code>&lt;not&gt;</code></h3>
                                  <p>Selects files that are not selected by a nested file selector.</p>
                                  <h3><code>&lt;or&gt;</code></h3>
                                  <p>Combines zero or more file selectors, using OR. An empty <code>&lt;or&gt;</code>
                  selector accepts all files.</p>
                                  <h3><code>&lt;url&gt;</code></h3>
                                  <p>Selects files whose URL matches an Ant 1 style pattern, or a regular expression.</p>
                      </blockquote>
      </td></tr>
    </table>
                      </blockquote>
      </td></tr>
    </table>
                </td>
          </tr>
  
          <!-- FOOTER -->
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          <tr><td colspan="2">
            <div align="center"><font color="#525D76" size="-1"><em>
            Copyright &#169; 2000-2002, Apache Software Foundation
            </em></font></div>
          </td></tr>
        </table>
      </body>
    </html>
  <!-- end the processing -->
  
  
  
  
  
  
  
  1.1                  jakarta-ant-myrmidon/site/src/xdocs/ant1compat.xml
  
  Index: ant1compat.xml
  ===================================================================
  <document>
  
      <properties>
          <author email="darrell at apache dot org">Darrell DeBoer</author>
          <title>Ant 1 Compatibitlity Layer</title>
      </properties>
  
      <body>
  
          <section name="Overview">
              <p>
              The Myrmidon-Ant1 Compatibility layer works by reusing most of the Ant 1 code,
              with tasks and datatypes
              being prefixed with "ant1." in build files. Almost all of the main Ant 1 tree
              is included in the compatibility layer antlib. To insulate from changes in
              the Ant 1 tree, Ant 1 class files are extracted from a jar, rather than
              being compiled from scratch.
              </p>
              <p>
              Here's how it works: The first time an Ant 1 task is encountered, an Ant 1
              project is created, and stored in the TaskContext under the name "ant1.project".
              The Ant 1 versions of Task and Project have been extended, overriding core behaviour,
              with Myrmidon-specific behaviour.
              </p>
              <p>
              The updated version of Task implements Configurable, receiving it's
              complete Task Model, and actually setting/adding/creating attributes
              with the help of the IntrospectionHelper. This process is designed to
              mimic the Ant 1 configuration policy, although not <i>all</i> of the
              subtle variations of configuration present in Ant 1 are handled.
              </p>
              <p>
              The updated version of Project will provide hooks into the Myrmidon TaskContext,
              such as:</p>
              <ul>
              <li>logging (done)</li>
              <li>properties (done)</li>
              <li>references (not yet done)</li>
              <li>Task defined by &lt;taskdef&gt; (done)</li>
              </ul>
  
              <p>
              So at present, properties declared in Ant 2 tasks are available to all Ant 1 tasks,
              and vice-versa. However, while a <code>&lt;ant1.path&gt;</code> reference works fine
              in other <code>&lt;ant1.XXX&gt;</code>
              tasks, it's not visible to Ant 2 tasks in the same build, and vice-versa.
              </p>
  
              <p>
              The <code>&lt;taskdef&gt;</code> task works ok, registering the task with the TypeManager using the
              "ant1." prefix. Only a couple of DataTypes (Path and Patternset) are working
              as top-level types, but this should be just a matter of adding references to
              the Ant 1 version of TypeInstanceTask in the descriptor.
              </p>
  
              <p>
              The TransformingProjectBuilder (which is now the default builder for files
              of type ".xml", applies a transformation stylesheet to the file, prefixing select
              tasks (all at present) with "ant.". If a version attribute is encountered, the
              file is not transformed
              </p>
          </section>
  
          <section name="Using the compatibility layer">
              <subsection name="Using Ant 1 tasks in a Myrmidon build file">
                  <p>
                  If you have a Myrmidon build file (eg with <code>version="2.0"</code>
                  on the project element, you can use Ant 1 tasks and datatypes by using
                  the "ant1." suffix on the regular element name.
                  Virtually <i>all</i> tasks and datatypes from Ant 1.4.1 are available
                  in this way.
                  </p>
                  <p>
                  When declaring a new task using the <code>&lt;ant1.taskdef&gt;</code>
                  task, <i>don't</i> prepend "ant1." to the taskname. This will be
                  done automatically by the taskdef task. However, you will need
                  to use the "ant1." prefix in all uses of that task.
                  </p>
              </subsection>
  
              <subsection name="Using an existing Ant 1 build file">
                  <p>
                  Myrmidon will automatically handle Ant 1 build files using the
                  Ant 1 Compatibility layer. So, using an Ant 1 build
                  file with Myrmidon should be as simple as:</p>
                  <pre>[myrmidon-command] -f ant1-build-file.xml</pre>
                  <p>
                  This works as follows: When Myrmidon encounters a ".xml" build file which does not have a
                  <code>version</code> attribute on the top-level <code>project</code>
                  element, it assumes that it is an Ant 1 build file. So all tasks are
                  interpreted as though they are prefixed with the "ant." name prefix.
                  </p>
  
                  Myrmidon will automatically attempt to upgrade any ".xml" build file that
              </subsection>
          </section>
  
          <section name="Building the compatibility layer">
              <p>Before building the Ant 1 Compatibility layer, you need to build
              Myrmidon, running the <code>dist-lite</code> target of the main build.
              See <a href="user.html#Building Myrmidon">the build instructions</a>
              for more details.</p>
  
              <p>To build the compatibility layer, simply execute:</p>
              <pre>ant -f ant1compat.xml</pre>
              <p>from within the root directory of the Myrmidon source tree.</p>
  
          </section>
  
      </body>
  </document>
  
  
  
  
  1.1                  jakarta-ant-myrmidon/site/src/xdocs/buildfile.xml
  
  Index: buildfile.xml
  ===================================================================
  <document>
  
  <properties>
  <author email="adammurdoch@apache.org">Adam Murdoch</author>
  <title>User Guide</title>
  </properties>
  
  <body>
  
  <section name="Project File">
  
  <p>
  A project file is an XML file that describes which tasks to execute, and in
  which order to execute them in.  A project can be broken up into several steps,
  or <i>targets</i>.  A target is simply a list of the tasks that need to be
  executed to perform the step.  A target may also include some dependency
  information.  Myrmidon makes sure that targets are executed in the correct order,
  so that a target is executed before the targets that depend on it.</p>
  
  <p>The project file format is very similar to the format used in Ant 1.  The
  root element of a project file must be a <code>&lt;project&gt;</code> element.
  It can take the following attributes:
  </p>
  
  <table>
      <tr><th>Attribute</th><th>Description</th><th>Default Value</th></tr>
      <tr>
          <td>name</td>
          <td>The project name.</td>
          <td>The name of the project file, with the extension removed.</td>
      </tr>
      <tr>
          <td>basedir</td>
          <td>The base directory for the project.  The base directory is used
          to resolve all relative file names used in the project file.
          </td>
          <td>The directory containing the project file.</td>
      </tr>
      <tr>
          <td>default</td>
          <td>The name of the default target.</td>
          <td><code>main</code></td>
      </tr>
      <tr>
          <td>version</td>
          <td>The project file format version that the project is written for.</td>
          <td>None, must be <code>2.0</code></td>
      </tr>
  </table>
  
  <p>
  A <code>&lt;project&gt;</code> element can contain the following elements,
  in the order given below:
  </p>
  
  <ul>
  <li><a href="#project-refs">Project references</a></li>
  <li><a href="#antlib-imports">Library imports</a></li>
  <li><a href="#init-tasks">Initialization tasks</a></li>
  <li><a href="#targets">Targets</a></li>
  </ul>
  
  <subsection name="Project References" anchor="project-refs">
  
  <p>Project references allow the project to import, or reference, other projects.
  A <code>&lt;projectref&gt;</code> element takes the following attributes:</p>
  
  <table>
      <tr><th>Attribute</th><th>Description</th><th>Default Value</th></tr>
      <tr>
          <td>name</td>
          <td>The name to use to identify the referenced project.</td>
          <td>Required</td>
      </tr>
      <tr>
          <td>location</td>
          <td>The path to the project file to reference.</td>
          <td>Required</td>
      </tr>
  </table>
  
  <p>
  The targets of a referenced project can be used in the <code>depends</code> list
  of a target in the referencing project, using the syntax
  <code><i>project-name</i>-><i>target-name</i></code>.  Here is a simple example:</p>
  
  <source><![CDATA[
  
  <project version="2.0">
      <!-- Reference another project -->
      <projectref name="subproject" location="subproject/build.xml"/>
  
      <!-- Use the "compile" target from the referenced project -->
      <target name="main" depends="subproject->compile">
          .. do some stuff ..
      </target>
  </project>
  ]]></source>
  
  </subsection>
  
  <subsection name="Library Imports" anchor="antlib-imports">
  
  <p>Library imports allow the project to import the tasks and data-types from an
  antlib.  An <code>&lt;import&gt;</code> element takes the following attributes:</p>
  
  <table>
      <tr><th>Attribute</th><th>Description</th><th>Default Value</th></tr>
      <tr>
          <td>library</td>
          <td>The name of the library to import.  The <code>ext</code> directory
          of the Myrmidon distribution is searched for a library file with
          the given name, and an <code>atl</code> extension.</td>
          <td>Required</td>
      </tr>
      <tr>
          <td>type</td>
          <td>The type of definition to import.  Values include <code>task</code>,
          and <code>data-type</code>.</td>
          <td>None</td>
      </tr>
      <tr>
          <td>name</td>
          <td>The name of the type to import.</td>
          <td>None</td>
      </tr>
  </table>
  
  <p>
  If the <code>type</code> and <code>name</code> attributes are not provided,
  the entire contents of the antlib are imported.
  </p>
  
  <p>The following example import the <code>&lt;my-task&gt;</code> task from
  the <code>my-tasks</code> antlib.</p>
  
  <source><![CDATA[
  
  <project version="2.0">
    <!-- Import task <my-task> from the 'my-tasks' antlib. -->
    <import library="my-tasks" type="task" name="my-task"/>
  
    <target name="main">
       <my-task some-prop=".."/>
    </target>
  </project>
  ]]></source>
  
  </subsection>
  
  <subsection name="Initialization Tasks" anchor="init-tasks">
  
  <p>Initialisation tasks are run before any of the project's targets are run, and
  are used to initialise the project.  Any task can be used as an initialization
  task, including <code>&lt;property&gt;</code> and data-type instances.  An example:</p>
  
  <source><![CDATA[
  
  <project version="2.0">
  
    <property name="some-property" value="some value"/>
    <path id="classpath">
      <fileset dir="lib"/>
    </path>
    <log>Set classpath to ${classpath}</log>
  
    <target name="main">
      .. do some stuff ..
    </target>
  
  </project>
  ]]></source>
  
  </subsection>
  
  <subsection name="Targets" anchor="targets">
  
  <p>Targets have a similar format to targets in Ant 1.x, though some of the
  behaviour is different.  A <code>&lt;target&gt;</code> element takes the
  following attributes:</p>
  
  <table>
      <tr><th>Attribute</th><th>Description</th><th>Default Value</th></tr>
      <tr>
          <td>name</td>
          <td>The name of the target.</td>
          <td>Required</td>
      </tr>
      <tr>
          <td>depends</td>
          <td>A comma-separated list of targets that this target depends on.
          This list can contain targets from referenced projects.</td>
          <td>None</td>
      </tr>
  </table>
  
  </subsection>
  
  </section>
  
  <section name="Tasks">
  
      <p>
      Listed below are some of the current set of tasks.  You can find example
      usages of these tasks in the sample project file <code>src/make/sample.ant</code>.
      </p>
  
      <h3><code>&lt;condition&gt;</code></h3>
  
      <p>Sets a property if a particular condition is true.  See
      <a href="#Conditions">Conditions</a> for a list of available conditions.</p>
  
      <h3><code>&lt;fail&gt;</code></h3>
      <p>Causes the build to fail.</p>
  
      <h3><code>&lt;if&gt;</code></h3>
      <p>Conditionally executes a set of tasks.</p>
  
      <h3><code>&lt;load-properties&gt;</code></h3>
      <p>Loads a set of properties from a file.</p>
  
      <h3><code>&lt;log&gt;</code></h3>
      <p>Writes a log message.</p>
  
      <h3><code>&lt;property&gt;</code></h3>
      <p>Sets a property.</p>
  
      <h3><code>&lt;try-catch&gt;</code></h3>
      <p>Runs a set of tasks, with a provided error and clean-up handler.</p>
  
      <h3><code>&lt;converter-def&gt;</code></h3>
      <p>Register a type converter.  These are used when configuring a task
      or data-type from attributes.</p>
  
      <h3><code>&lt;type-def&gt;</code></h3>
      <p>Register a task or data-type.</p>
  
      <h3><code>&lt;import&gt;</code></h3>
      <p>Register the contents of an antlib.</p>
  
  </section>
  
  <section name="Conditions">
  
      <p>The following conditions are available </p>
  
      <h3><code>&lt;and&gt;</code></h3>
      <p>Evaluates a set of nested conditions, and AND them together.  Evaluation is
      lazy.  An empty <code>&lt;and&gt;</code> condition evaluates to true.</p>
  
      <h3><code>&lt;available&gt;</code></h3>
      <p>Tests if a particular class or resource is available.</p>
  
      <h3><code>&lt;file-test&gt;</code></h3>
      <p>Tests a file against a set of <a href="vfs.html#File Selectors">file selectors</a>.</p>
  
      <h3><code>&lt;is-set&gt;</code></h3>
      <p>Tests whether a proeprty is set, and not set to 'false'.</p>
  
      <h3><code>&lt;or&gt;</code></h3>
      <p>Evaluates a set of nested conditions, and OR them together.  Evaluation is
      lazy.  An empty <code>&lt;or&gt;</code> evaluates to true.</p>
  
      <h3><code>&lt;os&gt;</code></h3>
      <p>Tests which operating system the build is running on.</p>
  
      <h3><code>&lt;not&gt;</code></h3>
      <p>Negates a nested condition.</p>
  
  </section>
  
  <section name="File Name Mappers">
  
      <p>The following file name mappers are available:</p>
  
      <h3><code>&lt;chain&gt;</code></h3>
  
      <p>Applies a set of nested file name mappers to file names.</p>
  
      <h3><code>&lt;flatten&gt;</code></h3>
  
      <p>Maps all file names to a single directory.</p>
  
      <h3><code>&lt;prefix&gt;</code></h3>
  
      <p>Adds a prefix to the front of each file name.</p>
  
      <h3><code>&lt;map-extension&gt;</code></h3>
  
      <p>Changes the extension of file names.</p>
  
  </section>
  </body>
  
  </document>
  
  
  
  1.1                  jakarta-ant-myrmidon/site/src/xdocs/classloader.xml
  
  Index: classloader.xml
  ===================================================================
  <?xml version="1.0"?>
  <document>
  
      <properties>
          <title>On ClassLoaders in Ant 2</title>
          <author email="peter@apache.org">Peter Donald</author>
      </properties>
  
      <body>
  
          <section name="ClassLoader Management">
  
              <p>In many ways Ant 2 needs to follow rules similar to a number of
              different application servers with respect to ClassLoader management.
              Ant 2 will create a number of different ClassLoaders that have access
              to different sets of resources (and thus Classes). The main reason
              for this arrangment is to partition different sections of the
              application such as the Container, the Task API, task/type libraries
              and support libraries.</p>
  
              <p>The recomended structure for ClassLoader relationships is a hierarchy.
              When a ClassLoader is asked for a resource (or a class) it first delegates
              to it's parent to ask for the resource. If the resource is not present in
              its parent ClassLoader then the ClassLoader attempts to locate the resource
              in it's own store. In practice this means that all the classes (and static
              variables defined by said classes) in a parent ClassLoader are shared with
              the child ClassLoaders.</p>
  
              <p>Using kooky ascii art, the specific ClassLoader structure for Ant 2 is as
              follows:</p>
  
              <source>
                    Bootstrap
                        |
                     System
                        |
                     Common
                    /      \
               Container  Shared
                           /   \
                      Antlib1  Antlib2 ...
              </source>
  
              <ul>
                  <li>
                    The
                      <strong>Bootstrap</strong> ClassLoader contains the classes and resources
                    provided by the Java runtime.
  
                  </li>
                  <li>
                    The
                      <strong>System</strong> ClassLoader contains the classes that were made accessible
                    via the CLASSPATH environment variable. If the standard ant script was used then this
                    should only contain the classes that are used to bootstrap the ant runtime. ie
  
                      <code>$ANT_HOME/bin/ant-launcher.jar</code>
                  </li>
                  <li>
                    The
                      <strong>Common</strong> ClassLoader contains the classes and resources
                    that are made visible to both the Container and to all the ant type libraries. This
                    contains all the classes that the Container uses to communicate with tasks and other
                    supporting infrastructure. In particular it contains the following APIs;
  
                      <ul>
                          <li>
                              <em>Task API</em> - Contains the classes that are part of the API used
                            to define tasks.
  
                          </li>
                          <li>
                              <em>ProjectListener API</em> - Contains the classes necessary to define new
                            ProjectListeners.
  
                          </li>
                          <li>
                              <em>Aspect API</em> - Contains the classes that are used to define Aspects
                            of the container.
  
                          </li>
                          <li>
                              <em>Container API</em> - Contains the interfaces that are required to communicate
                            with the objects deep within the container.
                              <strong>NOTE</strong>: These interfaces
                            are not to be used by user tasks but are made available so that certain tasks (such
                            as &lt;antcall/&gt;) can be implemented. However they are subject to change without
                            notice between between different Ant 2 versions.
  
                          </li>
                      </ul>
                      <p>
                        These classes are loaded from all the jars present in the
                          <code>$ANT_HOME/lib</code>
                        directory.
  
                      </p>
                  </li>
                  <li>
                    The
                      <strong>Container</strong> ClassLoader contains all the classes and resources
                    that are part of the actual implementation of the Container. These classes are not
                    directly accessible to any Ant library or task. Some of the classes are indirectly
                    accessible to tasks and other elements defined in the ant libraries as they implement
                    interfaces defined in the
                      <strong>Common</strong> ClassLoader. The classes that are
                    stored in jars in the
                      <code>$ANT_HOME/bin/lib/</code> directory.
  
                  </li>
                  <li>
                    The
                      <strong>Shared</strong> ClassLoader contains all the classes and resources
                    that are shared across all of the ant libraries (unless they are als needed by the
                    container in which case they should be placed int the
                      <strong>Container</strong>
                    ClassLoader). This ClassLoader is populated by all the jars that are contained in
                    the
                      <code>$ANT_HOME/shared/</code> directory.
  
                  </li>
                  <li>
                    The
                      <strong>AntLib</strong> ClassLoaders each contain the classes and resources
                    that required by that particular library. Note that in some cases a single Ant
                    Library will manifest as a single ClassLoader containing a single jar. However
                    in some cases it is possible for one Ant Library to have multiple jars in its
                    ClassLoader or even have multiple ClassLoaders. See XXXX for further details.
  
                  </li>
              </ul>
  
          </section>
  
      </body>
  </document>
  
  
  
  1.1                  jakarta-ant-myrmidon/site/src/xdocs/configuring.xml
  
  Index: configuring.xml
  ===================================================================
  <?xml version="1.0"?>
  <document>
  
      <properties>
          <title>On Task Configuring in Ant 2</title>
          <author email="peter@apache.org">Peter Donald</author>
      </properties>
  
      <body>
  
          <section name="Introduction">
              <p>This section will describe in detail the mechanism via which tasks are
              configured. Configuration is the name given to the stage in tasks
              lifecycle via which the XML representation is mapped onto the task 
              object.</p>
          </section>
  
          <section name="Names">
  
              <p>When mapping the XML representation on to the task object you
              need to be able map the names as they appear in the XML to the 
              names as they appear in the Java code. The process is for generating
              a java name from the xml name is as follows.</p>
              <ol>
                <li>Capitalize the first character of name.</li>
                <li>Find any '-' characters in XML name and remove character and
                capitalize the following letter. (And there must be a following 
                letter)</li>
              </ol>
              <p>Some example mappings;</p>
              <source>
  my-name    ===&gt;   MyName
  aString    ===&gt;   AString
  Basedir    ===&gt;   Basedir
  baseDir    ===&gt;   BaseDir
  url        ===&gt;   Url</source>
              <p>Note that the above transformation is lossy and as such the 
              following XML names all map to the same Java name. The ant1.x mapping 
              is similarly lossy and in practice this has not been an issue.</p>
              <source>
  base-dir   ===&gt;   BaseDir
  Base-dir   ===&gt;   BaseDir
  baseDir    ===&gt;   BaseDir
  BaseDir    ===&gt;   BaseDir</source>
              <p><i>NOTE: We should really resolve this and either disallow '-' characters 
              or disallow uppercase or something. (PD)</i></p>
          </section>
  
          <section name="Resolving Values">
              <p>The first stage of mapping the XML representation to the task
              is resolving all text data. The text data that needs to be resolved 
              include the values of attributes and the content.</p>
              <p>Resolution consists of expanding any property references in the text
              data. Property references are identified as starting with the token 
              &quot;${&quot; and finishing with another &quot;}&quot; token. The text 
              in between is the name of a property. The value of the property replaces
              the sequence of text starting with the &quot;${&quot; token and finishing 
              with the &quot;}&quot; token.</p>
              <p>Note that the value of the property may not be a string. If the text data
              contains text (or other property references) to either side of the property
              reference then it must be <a href="converter.html">converted</a> to a 
              String.</p>
          </section>
  
          <section name="Modeller">
              <p>Currently the representation of object are stored in a hierarchial 
              tree of <code>org.apache.myrmidon.api.metadata.ModelElement</code>
              objects. Each ModelElement has a number of attributes and can have
              either content or sub-elements.</p>
              <p>In most cases it is the responsibility of the runtime to map 
              the ModelElement onto an object. However in some cases it may be useful 
              for the object to get access to it's own model and for it to explicitly
              manage it's own configuration. In this case the object should implement
              the <code>org.apache.myrmidon.api.metadata.Modeller</code> interface
              which will provide the mechanism for the object to receive its own 
              representation and configure itself.</p>
              <p>Note that the Modeller mechanism should be avoided if possible
              as it adds considerable complexity to the implementing object.</p>
          </section>
  
          <section name="Attributes">
              <p>To map an XML attribute on to a Java object, the name of the 
              attribute is mapped to a java name and prefixed with the string
              &quot;set&quot;. The resulting string is then used to look up a 
              method with a single parameter.</p>
              <p>For example, for the attribute &quot;world&quot; would result
              in a lookup of a method named &quot;setWorld&quot; with a single
              parameter.</p>
              <p>If multiple methods were matched during the lookup then an 
              exception is thrown indicating ambiguity. Theres is an exception
              to this rule that allows 2 methods to be matched if one of the 
              methods takes a <code>java.lang.String</code> parameter. The method
              that has the <code>java.lang.String</code> parameter is ignored and 
              the other method would be chosen. This exception is allowed as it is 
              common practice for a task to evolve from String parameters to more 
              strongly typed parameters.</p>
              <p>The resolved text data of the attribute must be 
              <a href="converter.html">converted</a> to the type of the matched 
              methods parameter. For example, if the &quot;setWorld&quot; method
              took a parameter of type <code>java.io.File</code> then the resolved
              text data must be converted into a <code>java.io.File</code>. The
              conversion is done by the Converter architecture that is more fully 
              described in the <a href="converter.html">Converter HOWTO</a>.</p>
              <p>After the value is converted to the correct type the method is 
              invoked with the converted value.</p>
          </section>
  
          <section name="Content">
              <p>The XML representation of object can have either have nested
              elements or nested text (content) but not both. To add the content
              to an object a method named "content" with one parameter is looked 
              up. The resolved text data for content is then 
              <a href="converter.html">converted</a> to the type of the parameter
              and passed in via the method.</p>
          </section>
  
          <section name="Element">
              <p>Mapping an ModelElement onto a java object is a series of steps.
              If the ModelElement name ends with the string &quot;-ref&quot; then 
              it is treated as a reference element - see the <em>Referrenced 
              Elements</em> section. Otherwise, the element is first attempted to 
              be mapped as a <em>Named Element</em> and if no match is found via 
              that method it tries to treat the element as a <em>Typed Element</em>.</p>
          <subsection name="Named Elements">
              <p>To map a named ModelElement on to a Java object, the name of 
              the element is mapped to a java name and prefixed with the string
              &quot;add&quot;. The resulting string is then used to look up a 
              method with a single parameter.</p>
  
              <p>For example, for the attribute &quot;geometry&quot; would result
              in a lookup of a method named &quot;addGeometry&quot; with a single
              parameter. If multiple methods were matched during the lookup then an 
              exception is thrown indicating ambiguity. If no methods were found that
              match name then skip down to configuring &quot;typed&quot; elements.</p>
  
              <p>The type of the methods single parameter is then examined to determine
              what happens next. There are two valid situations, if neither of these are 
              satisfied, then an exception is thrown.</p>
              <ul>
                <li>The parameters type is <code>org.apache.myrmidon.api.metadata.ModelElement</code></li>
                <li>The parameters type is a concrete class</li>
              </ul>
              <p>1. If the parameter has a type of <code>org.apache.myrmidon.api.metadata.ModelElement</code>
              then the un-modified model representation of element is passed to object by invoking
              the adder method.</p>
              <p>2. If the parameters type is concrete then an instance of the parameter is 
              instantiated using the default constructor. This created object is then configured 
              in the same manner as task using the elements representation as the model. After
              the object is configured it is passed into object by invoking the adder method.</p>
          </subsection>
          <subsection name="Referrenced Elements">
              <p>A referenced element is one that has a name ending in 
              &quot;-ref&quot; and has a single attribute &quot;name&quot;
              and no content or child elements.</p>
  
              <p>The value of the &quot;name&quot; attribute is the name of a property. 
              The value of this property is retrieved from the TaskContext.</p>
  
              <p>Like with <em>Named Elements</em> the name of the element (minus
              the &quot;-ref&quot; part) is mapped to a java name and prefixed with the string
              &quot;add&quot;. The resulting string is then used to look up a 
              method with a single parameter. If multiple methods were matched during the lookup then an 
              exception is thrown indicating ambiguity.</p>
  
              <p>The value retrieved from the TaskContext is then converted to the type 
              of the methods parameter and the add method is invoked with the converted value.</p>
              
              <p>An example usage is the following;</p>
              <source><![CDATA[
  
              <my-task ...>
                <classpath-ref name="project.class.path"/>
              </my-task>
  
  ]]></source>
          </subsection>
          <subsection name="Typed Elements">
              <p>&quot;Typed&quot; elements can also be added to an object. A typed element 
              is one in which the name of the element actually refers to a type rather than the 
              name of the adder to call.</p>
              <p>For example, you may wish to allow a task to add arbitrary instances of the 
              Condition role to a task. So instead of adding methods such as 
              <code>addAnd(AndCondition)</code>, <code>addOr(OrCondition)</code> and
              <code>addXor(XorCondition)</code> you can instead add a single method 
              <code>add(Condition)</code>. This vastly simplifies the amount of work required
              to write tasks that take conditions. More importantly it allows end-users to 
              extend the number of elements selected by task. For instance if the user wanted
              a &quot;nand&quot; condition they could write the Nand type use it in their build
              file. For a discussion on roles and types see the <a href="types.html">Types
              HOWTO</a>.</p>
              <p>To use a Typed adder there must be a single method named &quot;add&quot; that
              has a single parameter. The parameter <em>MUST</em> be an abstract interface and
              must be registered as a role. The name of the element is then used to lookup the
              a type in the TypeManager with a role matching the interface name.</p>
  
              <p>For example if an element named &quot;nand&quot; was added to an object that had 
              an adder with the signature <code>void add( Condition condition )</code> then 
              the type named &quot;nand&quot; in the role &quot;Condition&quot; would be looked up.
              An instance of the type would then be created using the default constructor and the
              created object would be configured and then adder to object using adder.</p>
  
          </subsection>
          </section>
      </body>
  </document>
  
  
  
  1.1                  jakarta-ant-myrmidon/site/src/xdocs/differences.xml
  
  Index: differences.xml
  ===================================================================
  <document>
      <properties>
          <author email="adammurdoch@apache.org">Adam Murdoch</author>
          <title>Differences to Ant 1</title>
      </properties>
  
      <body>
          <section name="Differences to Ant 1.x">
  
              <p>Some of the differences between Ant 1.x and Myrmidon:</p>
              <ul>
                  <li>
                  Groups of tasks can be assembled into self-describing
                      <i>antlib</i> task libraries.  This makes it very easy to
                  distribute and install tasks and data-types.
                  </li>
                  <li> A project can import other projects, and reference their targets. </li>
                  <li>Properties and data type references now share the same namespace.</li>
                  <li>
                  Changes to task and data-type API:
                      <ul>
                          <li>An interface based API, through which a task interacts with the
                          task engine, and the services it provides.</li>
                          <li>A well-defined object lifecycle.</li>
                          <li>Polymorphic types are supported when objects are configured.</li>
                          <li>Reference handling is handled automatically when objects are configured.</li>
                          <li>Aspects can be used to decorate tasks, to add facilities like logging,
                          error handling, or user preferences.</li>
                      </ul>
                  </li>
                  <li>A set of well-defined services and APIs have been introduced, to allow
                  tasks to do their work without depending on other tasks:
                      <ul>
                          <li>Execute external commands.</li>
                          <li>Execute other tasks.</li>
                          <li>Manage ClassLoaders and Class-paths.</li>
                          <li>Virtual file system (in progress).</li>
                          <li>Execute Java applications (in progress).</li>
                          <li>...</li>
                      </ul>
                  </li>
              </ul>
              <p>There are plenty more features planned.  You can read about them
                  <a href="todo.html">here</a>.
              </p>
          </section>
      </body>
  
  </document>
  
  
  
  1.1                  jakarta-ant-myrmidon/site/src/xdocs/getinvolved.xml
  
  Index: getinvolved.xml
  ===================================================================
  <document>
  
      <properties>
          <author email="adammurdoch@apache.org">Adam Murdoch</author>
          <title>Get Involved</title>
      </properties>
  
      <body>
          <section name="Get Involved">
  
              <p>There are plenty of things you can do to help out with Myrmidon.  The
              <a href="todo.html">Todo list </a> describes items which still need to
              be done.  Of course, since this is an open-source project, there's
              plenty of scope for experimentation, and you can pretty much make up
              your own items to work on.</p>
  
              <p>Some things that are worth reading if you do want to get involved:</p>
              <ul>
                  <li>The <a href="http://jakarta.apache.org/ant/ant2/">Ant 2</a> goals and requirements.</li>
                  <li>The <a href="http://jakarta.apache.org/ant/ant2/actionlist.html">Ant 1.9 Action List</a>.</li>
                  <li>The Jakarta Project's <a href="http://jakarta.apache.org/site/getinvolved.html">Get Involved</a> page.</li>
              </ul>
  
              <p>There is no Ant 2 or Myrmidon mailing list yet, so direct any questions
              or comments you have to the ant-dev mailing list.</p>
  
          </section>
  
      </body>
  </document>
  
  
  
  1.1                  jakarta-ant-myrmidon/site/src/xdocs/index.xml
  
  Index: index.xml
  ===================================================================
  <document>
  
      <properties>
          <author email="peter@apache.org">Peter Donald</author>
          <title>Myrmidon</title>
      </properties>
  
      <body>
          <section name="What is Ant?">
  
              <p>Ant is a cross-platform build tool that features ease of
              use and extensibility as it's primary goal.</p>
  
              <p>Why another build tool when there is already make, gnumake,
              nmake, jam, and others? Make-like tools are inherently shell-based;
              they execute native commands and shell scripts to perform the work
              associated with the build process. So to extend the the tool by
              writing a program or script executable by the OS you are on. This
              makes it difficult to achieve portability between platforms.</p>
  
              <p>Ant is a different beast. Instead of using OS-specific commands
              to extend the build process, you leverage the cross-platform features
              of Java to write &quot;tasks&quot;. This makes it much easier to achieve
              a portal build process between platforms. Ant also differs in that it uses
              XML to describe the build process.</p>
  
          </section>
  
          <section name="What is Myrmidon?">
  
              <p>Myrmidon is a proposal for Ant 2. Ant 2 is the next evolution of the
              Ant build tool aimed at removing many of the limitations of the Ant 1.x
              product. In particular it aims to;</p>
  
              <ul>
                  <li>Remove ambiguities and points of confusion for build file
                  writers.</li>
                  <li>Ease deployment and management of 3rd party tasks and
                  dependencies.</li>
                  <li>Simplify development of tasks by task-writers.</li>
                  <li>Enable ad-hoc &quot;tasks&quot; to be written inside build file,
                  probably using well known scripting languages such as python and
                  javascript. (Possible in Ant 1.x but prohibitively difficult).</li>
                  <li>Integrate templating technologies such as XSLT, velocity etc
                  to enable development of reusable build file elements.</li>
              </ul>
  
              <p> You can read more about the goals of Ant 2
                  <a href="http://jakarta.apache.org/ant/ant2/">here</a>.
              </p>
  
              <p>Myrmidon was specifically designed as both a tool and as
              an API library that can be reused in other products. It contains the
              basic building blocks for assembling any sort of task-based tool. Ant 2
              is an example of such a tool, which could be assembled using the Myrmidon
              task container, and a library of build related tasks. In the future expect
              to see Testing frameworks, Job Schedulers (ie Cron managers), shells
              and install tools based on the Myrmidon base.</p>
  
          </section>
  
          <section name="A Rose by any other name ...">
              <p>
                The name Myrmidon is a derivation of a mythological name for some ants that were turned
                into soldiers by the god Zeus. It came to mean "a subordinate who executes orders
                unquestioningly" which seemed suitable for a task execution/build tool. A more complete
                description stolen from
                  <a href="http://bondi-blue.parlez.com/previous_words/myrmidon.txt">
                                              http://bondi-blue.parlez.com/previous_words/myrmidon.txt</a>.
              </p>
  
              <quote>
                  <i>The appellation Myrmidon was derived from the Greek word "myrmex",
                  meaning ant.  According to Greek mythology, the Myrmidons were
                  transformed into humans by the god Zeus as an act of kindness to his
                  son Aeacus.  King Aeacus, captivated by a colony of ants, prayed
                  that he should receive an increase in population equal to the
                  number of ants before him.  When he awoke the next day, the ants
                  were his human subjects.  Thereafter, they were known as the
                  Myrmidons.  See "The Iliad" for Homers' account of the Myrmidons
                  during the Trojan War.</i>
              </quote>
          </section>
      </body>
  </document>
  
  
  
  1.1                  jakarta-ant-myrmidon/site/src/xdocs/librarys.xml
  
  Index: librarys.xml
  ===================================================================
  <?xml version="1.0"?>
  <document>
  
      <properties>
          <title>On Libraries in Ant 2</title>
          <author email="peter@apache.org">Peter Donald</author>
      </properties>
  
      <body>
  
          <section name="Library Management">
  
              <p>Long ago there was identified the need for libraries that contain
              tasks and other elements present in the build file. This document
              attempts to describe the mechanism via which these libraries will be
              defined and used in Ant 2. The libraries (also referred to as
              deployments) will be termed antlibs.</p>
  
              <p>Ant libraries can be packaged and signed into a ANt Type Library
              format (.atl) using the standard Java Archive tools. (For details on
              the .jar file format see the
  
                  <a href="http://java.sun.com/j2se/1.3/docs/guide/jar/index.html">
                             Jar Specification</a>.
              </p>
  
              <p>When packaged into such a form the META-INF/ directory contains
              ant specific descriptors in addition to the standard Jar manifest
              and other descriptor files. The archive will also contain the
  
                  <code>.class</code> files for all the tasks and other types the
              library defines. It may also contain additional resources that can
              be referenced in the build file (an example being DTDs).
              </p>
  
              <p>The library may also need access to other libraries or resources
              to perform its job. For instance, if the task loaded an XML document
              and then processed said document using the
                  <em>Trax API</em> then
              the Ant library needs to have access to the
                  <em>Trax API</em> and an
              implementation of the API. The Antlib mechanism thus uses the standard
              "Optional Package" Specification to declare dependencies on other
              libraries.
              </p>
  
              <p>The libraries will usually be installed in standard locations that
              make it possible for the Ant container to automatically locate and scan
              the libraries. It will also be possible for the users to specify
              additional search locations or even the specific location of ant
              libraries.</p>
  
              <p>The following sections will describe each of these different facets
              in greater detail.</p>
  
              <subsection name="Descriptors">
  
                  <p>FIXME: Import this part from other doco</p>
  
              </subsection>
  
              <subsection name="Class and Resource Files">
  
                  <p>The class and resources files should be stored as in standard jars. The
                  root directory being the base via which code and resources are loaded. So
                  the
                      <code>.class</code> file for the Java class
                      <code>com.biz.tasks.Mytask</code>
                  would be stored in
                      <code>/com/biz/tasks/Mytask.class</code>
                  </p>
  
              </subsection>
  
              <subsection name="Dependencies">
  
                  <p>It is often the case that a library will need external resources. The
                  example given above described dependence on an external XML library. The
                  ant library thus needs a mechanism via which to declare dependencies on
                  external libraries.</p>
  
                  <p>Ant 2 uses the "Optional Package" mechanism. Prior to JDK1.3, an "Optional
                  Package" was known as an
                      <em>Extension</em>. The specification for this
                  mechanism is available in the JDK1.3 documentation in the directory
  
                      <code>$JDK_HOME/docs/guide/extensions/versioning.html</code>. Alternatively
                  it is available online at
  
                      <a href="http://java.sun.com/j2se/1.3/docs/guide/extensions/versioning.html">
                                     http://java.sun.com/j2se/1.3/docs/guide/extensions/versioning.html</a>.
                  </p>
  
                  <p>This mechanism was adopted as it is an established standard. The standard
                  is also begining to be adopted by other specifications such as the
                      <em>Servlet
                                     2.3 API</em>. Thus we are likely to see an increase of jars using this mechanism
                  to specify dependencies.
                  </p>
  
                  <p>The "Optional Package" mechanism allows jars to specify dependencies on other
                  jars that implement a particular specification at particular version levels. For
                  example you could specify a dependency on the Trax 1.1 API by adding the following
                  to the manifest of your jar.</p>
  
                  <source>
  Extension-List: trax
  trax-Extension-Name: Java API for XML Parsing
  trax-Specification-Version: 1.1
                  </source>
  
                  <p>In some cases you may also wish to specify a dependency on a specific vendors
                  implementation. For instance you may need to use xalan due to it implementing a
                  particular extension you need. In that case you manifest may contain;</p>
  
                  <source>
  Extension-List: trax
  trax-Extension-Name: Java API for XML Parsing
  trax-Specification-Version: 1.1
  trax-Implementation-Title: org.apache.xalan.xslt
  trax-Implementation-Version: 2.1.0
  trax-Implementation-Vendor: Apache Software Foundation
                  </source>
  
                  <p>In many cases there will be no distinction between the specification and
                  the implementation of a library. For instance the Velocity project only has
                  one implementation and one specification. In which case it is sufficient to
                  just declare a dependency on the Velocity "Specification". A library that uses
                  both the Trax API and the Velocity project may look like;</p>
  
                  <source>
  Extension-List: trax velocity
  velocity-Extension-Name: org.apache.velocity
  velocity-Specification-Version: 1.0
  trax-Extension-Name: Java API for XML Parsing
  trax-Specification-Version: 1.1
  trax-Implementation-Title: org.apache.xalan.xslt
  trax-Implementation-Version: 2.1.0
  trax-Implementation-Vendor: Apache Software Foundation
                  </source>
  
                  <p>To make other jars available to Ant libraries as "Optional Packages"
                  or Extensions then you need to add a few lines to the manifest of the
                  other jar. The minimal manifest is the following;</p>
  
                  <source>
  Extension-Name: org.realityforge.dve
  Specification-Vendor: Peter Donald
  Specification-Version: 1.0
                  </source>
  
                  <p>It is important to note that looking for dependencies is recursive. For example,
                  if the ant library depends upon jar A and and A depends on B then both A and B will
                  need to be loaded by the container.</p>
  
              </subsection>
  
              <subsection name="Implementation Notes">
  
                  <p>So far there has been no mention of implementation strategies for
                  managing ClassLoaders and other details about where the "Optional Packages"
                  are stored. This section will outline such details but they could change
                  in the future. The above specification will still be accurate but the approach
                  to implementing specification will be different.</p>
  
                  <p>In the current architecture all of the "Optional Packages" are assumed to
                  be stored in the
                      <code>$ANT_HOME/ext</code> directory. The runtime will scan
                  this directory for jars and add all the "optional Packages" found into a
                  registry. This registry will be used by the library loading mechanism to locate
                  all the "Optional Packages". The user is able to specify an alternative directory
                  or add a new directory to search on the commandline.
                  </p>
  
                  <p>When the container attempts to load an ant library it will also try to load
                  any needed dependencies. First it will check the parent ClassLoaders to see if any
                  of them contain the required dependencies. If not then it will search the
                  "Optional Packages" registry. If the dependency is not found then a error will be
                  signaled. If the dependency is found in the "Optional Packages" registry then it is
                  loaded by the same ClassLoader that is used to load the Ant library.</p>
  
              </subsection>
  
          </section>
  
      </body>
  </document>
  
  
  
  1.1                  jakarta-ant-myrmidon/site/src/xdocs/task.xml
  
  Index: task.xml
  ===================================================================
  <document>
  
  <properties>
  <author email="peter@apache.org">Peter Donald</author>
  <title>My First Task</title>
  </properties>
  
  <body>
  
  <section name="My First Task">
  
  <p>In Ant 1 it was very easy to write your own task. In Ant 2 we plan
  to make it even easier. To write a basic task simply follow the following
  formula.</p>
  
  <ol>
    <li>
      Create a Java class that extends
      <code>org.apache.myrmidon.api.AbstractTask</code>
    </li>
    <li>
      For each attribute, write a setter method. The setter method
      must be a public void method that takes a single argument. The name
      of the method must begin with "set", followed by the attribute name, with
      the first character of the name in uppercase, and the rest in lowercase.
      The type of the attribute can be:
      <ul>
        <li>String</li>
        <li>
          Any primitive type - they are converted for you from their
          String-representation in the buildfile
        </li>
        <li>
          File - the string representation will be interpreted relative to
          the project's basedir.
        </li>
      </ul>
    </li>
    <li>
      For each nested element create a public void method that takes a single
      argument. The name of the method must begin with "add", followed by the
      attribute name, with the first character of the name in uppercase, and
      the rest in lowercase. The type of the parameter is an object with a
      no-arguement constructor. It is configured in exactly the same was a
      task is configured (via setters and adders) and then added to the task.
    </li>
    <li>
      Write a public void method named "execute" with no arguments that
      throws a TaskException. This is the method called to do the
      actual work of the task.
    </li>
  </ol>
  
  <subsection name="A Basic Example">
  
  <p>So a basic task that has one attribute named "message" and just prints
  out this message is as simple as;</p>
  
  <source>
  package org.realityforge.tasks;
  
  import org.apache.myrmidon.api.AbstractTask;
  import org.apache.myrmidon.api.TaskException;
  
  public class SystemOutPrinterTask
      extends Task
  {
      private String m_message;
  
      // The setter for the "message" attribute
      public void setMessage( final String message )
      {
          m_message = message;
      }
  
      // The method executing the task
      public void execute()
          throws TaskException
      {
          System.out.println( m_message );
      }
  }
  </source>
  
  <p>To use this task you <em>could</em> create a library but instead we will
  just use &lt;taskdef&gt; to define the task. An example usage would be;</p>
  
  <source>
  <![CDATA[
  
  <?xml version="1.0"?>
  
  <project version="2.0">
  
    <target name="main">
      <taskdef name="printer"
               classname="org.realityforge.tasks.SystemOutPrinterTask"
               classpath="build/classes"/>
  
      <printer message="Hello World!"/>
    </target>
  </project>
  ]]>
  
  </source>
  
  </subsection>
  
  </section>
  </body>
  
  </document>
  
  
  
  1.1                  jakarta-ant-myrmidon/site/src/xdocs/todo.xml
  
  Index: todo.xml
  ===================================================================
  <document>
  
      <properties>
          <author email="adammurdoch@apache.org">Adam Murdoch</author>
          <author email="peter@apache.org">Peter Donald</author>
          <title>Get Involved</title>
      </properties>
  
      <body>
  
          <section name="Todo List">
  
              <p>The broad goal is to grow Myrmidon from a prototype task engine into a fully
              fledged build system, that can serve as the basis for Ant 2.  The following
              sections describe some of the many things which still need to be done to
              achieve that goal.  This list is currently under construction.</p>
  
              <!--
              <subsection name="">
              </subsection>
              -->
  
              <subsection name="Integrate XDocs proposal">
                  <p>Integrate with the XDocs proposal that generates XML documentation for
                  tasks. Rework that proposal so that it knows about the Myrmidon specific
                  patterns and features. Also rework it so that it can support reading
                  documentation and examples from side-by-side the task.</p>
              </subsection>
  
              <subsection name="TaskInfo">
                  <p>Consider allowing task writers to write their own TaskInfo objects
                  (or at least have them generated from XDoclet directives). This would
                  encompass both documentation and perhaps introspection of the types.</p>
              </subsection>
  
              <subsection name="XML Catalog to load XML Fragments">
                  <p>
                    When including fragments of XML we are currently forced to use relative paths.
                    However this is sometimes undesirable when a single fragment needs to be used
                    across several projects in several different locations. Instead we could use
                    a Catalog to name the fragment and then each developer would only need to install
                    the fragment once and it would be accessible from all the projects.
                  </p>
              </subsection>
  
              <subsection name="Refactor Java Infrastructure into a Service">
                  <p>Much like Exec should be decoupled from Ant runtime, so should classes
                  to implement java task for the same benefits.</p>
              </subsection>
  
              <subsection name="Structural Dependency Utils">
                  <p>
                    In the present ant, it is required that each task manage dependency separately.
                    This makes it a lot of work to implement even simple dependency checking. To this
                    day many of the core tasks do not implement it correctly. I am specifically
                    talking about "structural" dependency information. The main reason is that it is
                    painful to implement.
                  </p>
                  <p>
                    Some tasks do no dependency checking and will recompile/transform/etc everytime.
                    Others may perform a simple dependency checking (ie if source file is newer than
                    destination file then recompile). Ideally a dependency system would actually
                    calculate the dependencies correctly. So we need to have some mechanism to determine
                    that <code>foo.c</code> actually depends upon <code>foo.h</code>, <code>bar.h</code>
                    and <code>baz.h</code>. As this information is particular to each different task
                    we need to allow tasks to implement this behaviour. Possibly by supplying an interface
                    of the form;
                  </p>
  <source>
  public interface DependencyGenerator
  {
    File[] generateDependencies( File file );
  }
  </source>
                  <p>
                    Generating the dependency information is a costly operation and thus we do not want to
                    be doing it everytime you run ant. We want to generate it on the initial build and then
                    persist somewhere. Everytime a file is out of date, it's dependency information would
                    be regenerated and stored in the dependency cache. Ideally this cache would also store the
                    above mentioned coloring information. So the entry for <code>foo.c</code> may declare that
                    it is dependent upon <code>foo.h</code>, <code>bar.h</code> and <code>baz.h</code>, aswell
                    as being compiled with -O2 flag. If any of the dependencies have changed or are out of date
                    then foo.c would need to be recompiled.
                  </p>
                  <p>
                    A possible API would be
                  </p>
  <source>
  DependencyManager dm = ...;
  dm.setFileSet( myFileSet );
  dm.setDependencyCache( myDependencyCacheFile );
  File[] files = cm.getOutOfDate();
  </source>
              </subsection>
  
              <subsection name="Antlibs storing templates">
                  <p>After a templating system is formalized it would useful to define
                  a mechanism via which you can store templates in an antlib. These
                  templates could then be loaded and used by build files through a
                  "standard" mechanism. This may need to be merged with the XML catalog
                  system.</p>
              </subsection>
  
              <subsection name="Antlibs Storing General Resources">
                  <p>Add a system via which ant libs can store general resources for
                  consumption by build users. This could be used to store the XML fragments
                  for the XML catalog, the template fragments for templates, images for
                  documentation system and so forth.</p>
              </subsection>
  
              <subsection name="Coloring API">
                  <p>
                    When you execute a task such as "javac" there is two types of dependency information
                    that is important to analyze before we determine if we need to recompile a file. Say
                    we are compiling <code>Foo.java</code>, it may depend on the <code>Bar.java</code>
                    file. We call this "structural" dependency information - the structure of the source file
                    determines what other files it depend upon. However there is also "environmental"
                    dependency information. For instance if the <code>Foo.java</code> file was compiled with
                    <code>debug="true"</code> last run and this time needs to be compiled with
                    <code>debug="false"</code> then it is out of date and needs to be recompiled. We call this
                    "environmental" dependency information "coloring".
                  </p>
                  <p>
                    So we need to create an infrastructure that allows tasks to manage "coloring". So a task
                    should be able to add coloring information for each resource processed. When the task
                    comes to process the resource again it will detect if the coloring has changed and if it
                    has will force a recompile.
                  </p>
                  <p>
                    An API for such a bean has yet to be established but an example API would be.
                  </p>
  <source>
  ColoringManager cm = ...;
  cm.addColor( "debug", "true" );
  cm.addColor( "optimize", "false" );
  cm.setFileSet( myFileSet );
  File[] files = cm.getOutOfDate();
  </source>
              </subsection>
  
              <subsection name="Create Task/Element/Attribute Naming guidelines">
  
                  <p> Currently Ant has a mixture of tasks from various stages it's evolution, with different
                  authors and each utilizing different naming patterns. Some tasks use names such as
                  "src" and "dest" while others use "file" and "tofile". It would be preferrable if
                  consistent naming patterns were used. It is recomended that we come up with a "best
                  practices" document to document our recomended naming patterns.</p>
                  <p>Before we can come up with such a document we need to identify common patterns through
                  out the tasks. Several tasks have the notion of transforming input from a "source"
                  to a "destination". So we should have consistent naming schemes for these attributes and
                  elements. Analysis of existing tasks will likely bring out other similar patterns. Once
                  we have identified and documented these similarities then we can establish conventions.</p>
  
              </subsection>
  
              <subsection name="Rethink Notification/Event scheme">
  
                  <p>We need to rethink the whole notificaiton scheme. Should tasks be able to
                  raise events? Probably as long as we have <em>ContainerTasks</em>. Should tasks
                  be able to query state of run? ie Can a task request "are we paused?" or "are we
                  stopped?" ? Probably as that way long running tasks are given the opportunity
                  to be gracefully halted by the end users (primarily aimed at IDE vendors here).</p>
  
              </subsection>
  
              <subsection name="XPath-like Locators for tasks">
  
                  <p>Most tasks are grouped into some sort of task container. The task containers
                  can be things like workspaces, projects, targets or other tasks. Each of these
                  containers usually has a name. Thus we could refer to tasks via a path such as
                  "/avalon/compile/javac" would refer to the task "javac" in the target "compile"
                  in the project "avalon". In the past it has been requested that a task get access
                  to this path programatically - other people have also asked for access to things
                  like the currently running target. We need to assess this and decide whether we
                  wish to support it.</p>
  
                  <p>Another point to think about is that we could use XPath-like string to designate
                  to other tasks to execute. ie antcall would refer to a path rather than a target name</p>
  
              </subsection>
  
              <subsection name="Embeddor HOWTO">
  
                  <p>Assigned To: Peter</p>
                  <p>Write a HOWTO describing how to embed Myrmidon into other
                  applications.</p>
  
              </subsection>
  
              <subsection name="Optional Dependencies">
  
                  <p>Assigned To: Peter</p>
                  <p>Extend Myrmidons library management facilities so that optional
                  dependencies may be declared for a library. ie The library will still
                  operate in absence of such libraries but can provide further features
                  if these libraries are present. Most likely this will be done via a
                  new manifest entry "Optional-Extension-List:" that behaves similar
                  to "Extension-List:" except that the extensions are optional.</p>
  
              </subsection>
  
              <subsection name="Facade task HOWTO">
  
                  <p>Currently we have a few tasks that have multiple implementations. For instance
                  Javac task can actually call jikes, jvc, classic javac or modern javac. Similar things
                  will be seen with the jspc task and the cc task (if it ever gets written). We have a base
                  class that is meant to facilitate this sort of task and make it easy to develope. See
                  AbstractFacadeTask. However we need to write up a HOWTO so people can use it.</p>
  
              </subsection>
  
              <subsection name="Mail tasks">
  
                  <p>Convert the Ant 1.x Mail tasks to Myrmidon.</p>
  
              </subsection>
  
              <subsection name="Security Manager">
                  <p>Add the ability to run java programs that call System.exit() by adding a
                  security manager. Should look something like:</p>
                  <source>
  public class MyrmidonSecurityManager
      extends SecurityManager
  {
      public void checkExit( final int status )
      {
          throw new ExitException( status );
      }
  
      public void checkPermission( final Permission permission )
      {
      }
  }
                  </source>
              </subsection>
  
              <subsection name="Self Hosting">
  
                  <p>Myrmidon must be able to build itself.  Currently, it is built using
                  Ant 1.x.  Ultimately, Myrmidon should be able to build itself from exactly the
                  same build file.  To start with, however, there is no need for Myrmidon to be
                  able to do this.  Myrmidon should also be able to be bootstrapped (that is, be
                  able to be built from scratch, without using Ant 1.x at all).</p>
  
              </subsection>
  
              <subsection name="Validation Pass">
  
                  <p>Consider calling validate() on task prior to execute(). This would allow
                  us to have a "make -k" mode that actually did basic validation and would also
                  encourage task writers to do validation properly.</p>
  
              </subsection>
  
              <subsection name="Paths">
  
                  <p>Consider allowing the user to configure the ant system by setting the
                  following path types.</p>
                  <ul>
                      <li>ant.type.path: path that is used to search for the type libraries</li>
                      <li>ant.ext.path: path that is used to search for "Optional Packages"
                      or extensions.</li>
                  </ul>
                  <p>
                  The default search path will probably include a per-user path element,
                  a workspace path element and a system path elemtn that are searched in
                  that order. Some possible defaults;
                  </p>
                  <ul>
                      <li>Unix Per-user: ${user.home}/.ant/lib, ${user.home}/.ant/ext</li>
                      <li>Windows Per-user: ${user.home}/ant/lib, ${user.home}/ant/ext</li>
                      <li>MacOSX Per-user: ${user.home}/Library/Ant/lib,
                      ${user.home}/Library/Ant/ext</li>
                      <li>Unix System-wide: /opt/ant/lib, /opt/ant/ext</li>
                      <li>Unix System-wide: /usr/local/ant/lib, /usr/local/ant/ext</li>
                      <li>Windows System-wide: %SYS_DRIVE%/Program Files/ant/lib,
                      %SYS_DRIVE%/Program Files/ant/ext</li>
                      <li>MacOSX System-wide: /Library/Ant/lib, /Library/Ant/ant/ext</li>
                  </ul>
  
              </subsection>
  
              <subsection name="Ant 1.x Compatibility">
                  <p>The Ant 1 Compatibility layer is still in early stages of development.
                  </p>
                  <ul>
                      <li>Get a version of <code>&lt;antcall&gt;</code> working.</li>
                      <li>
                      Provide hooks between Ant 1 references and Myrmidon properties.
                      May use converters for adapting Ant 2 objects (like Ant 2
                      <code>&lt;path&gt;</code> or <code>&lt;fileset&gt;</code>)
                      as Ant 1 types.
                      </li>
                      <li>
                      Missing tests:
                      <ul>
                          <li>Make sure properties are shared between Ant 1 and Myrmidon tasks.</li>
                      </ul>
                      </li>
                      <li>Get GUMP runs going using Myrmidon.</li>
                      <li>Add protected accessors for get/set/list properties in
                      Ant 1 Project, to minimise the amount of code duplication in
                      Ant1CompatProject.</li>
                  </ul>
              </subsection>
  
              <subsection name="Virtual File System">
  
                  <p>The VFS needs plenty of work:</p>
  
                  <ul>
                      <li>Move files/folders.</li>
                      <li>Recursive folders copy.</li>
                      <li>Search through a file hierarchy, using Ant-style wildcards.</li>
                      <li>Search through a file hierarchy, using a Selector interface.</li>
                      <li>The in-memory caching mechanism is pretty rudimentary at this stage.
                      It needs work to make it size capped.  In addition, some mechanism needs
                      to be provided to release and refresh cached info.
                      </li>
                      <li>Convert files/folders into local files, for handing off
                      to external commands, or legacy tasks.</li>
                      <li>Refactor the replication mechanism out of ZipFileSystemProvder,
                      and make more general pluggable.</li>
                      <li>Capabilities discovery.</li>
                      <li>Attributes and attribute schema.</li>
                      <li>Handle file canonicalisation better (for cases like case-insensitive
                      file systems, symbolic links, name encoding, etc).</li>
                      <li>File system layering.  That is, the ability for a file system to
                      sit on top of another file system, or a file from another file system
                      (e.g. Zip/Jar/Tar file systems, gzip/encoding file systems, virtual file
                      systems).
                      </li>
                  </ul>
  
              </subsection>
  
              <subsection name="File Data-Types and Tasks">
  
                  <p>The file data-types, such as
                      <code>&lt;fileset&gt;</code> and
  
                      <code>&lt;path&gt;</code>, are some of the most widely used parts of Ant 1.x.
                  Unfortunately, they aren't particularly extensible.
                  </p>
  
                  <ul>
                      <li>Redesign the file data-types, replacing them with an interface-based
                      API, plus a set of implementations.  The API should use the VFS file
  
                          <code>FileObject</code>, rather than
                          <code>java.io.File</code>.
                      This process has started, in the
                          <code>antlib.vfile</code> package.
  
                      </li>
                      <li>File Selectors:
  
                          <ul>
                              <li>Change
                                  <code>AbstractNameFileSelector</code> to use Ant 1 style patterns
                              matches, rather than Globs patterns.
                              </li>
                              <li>Add 'defaultexcludes' to
                                  <code>DefaultFileSet</code>.  Also add a
                              file selector implementation that matches everything except the default
                              excludes.
                              </li>
                              <li>Add a name selector that loads patterns from a file.</li>
                              <li>Add more selector implementations: size and last-modified comparisons,
                              checksum comparison, byte-wise content comparison.</li>
                          </ul>
                      </li>
                      <li>File conditions:
  
                          <ul>
                              <li>Add more condition implementations that perform checks on files.
                              One that searches a path for a file would be useful.</li>
                          </ul>
                      </li>
                      <li>File Name Mappers:
  
                          <ul>
                              <li>Change FileNameMapper.mapFileName() to take vfs.FileName objects.</li>
                              <li>Move the current mapper implementations across to antlib.</li>
                          </ul>
                      </li>
                      <li>File Sets:
  
                          <ul>
                              <li>Add a file set implementation that provides the union of several
                              nested file sets (that is, a file set that merges several file sets
                              together).</li>
                              <li>Add a file set implementation that filters files that are up-to-date
                              WRT some other file.  Alternatively, this might be better done as a
                              file selector.</li>
                          </ul>
                      </li>
                      <li>Paths:
  
                          <ul>
                              <li>Add path implementations that evaluate to the system classpath,
                              and the ant runtime classpath.  Or, more generally, combine this with
  
                                  <code>ClassLoaderManager</code> to evaluate to the classpath of any
                              'library' (e.g. system classpath, ant runtime, tools.jar,
                              an antlib, an installed extension, or the system classes of another JVM
                              for cross-compiling).
                              </li>
                          </ul>
                      </li>
                      <li>Port across the Ant 1 file filter proposal, once it is complete.</li>
                      <li>Copy task:
  
                          <ul>
                              <li>Implement 'preservelastmodified', 'overwrite', and 'includeemptydirs'.</li>
                              <li>Support a file name mapper.</li>
                              <li>Support file filters.</li>
                              <li>Detect and handle destination file name collisions.</li>
                          </ul>
                      </li>
                      <li>Implement the
                          <code>&lt;move&gt;</code>,
                          <code>&lt;delete&gt;</code>,
  
                          <code>&lt;touch&gt;</code> and
                          <code>&lt;mkdir&gt;</code> tasks on top
                      of the VFS and the new file data-types.  Might be some scope for generalising
                      'touch' and 'mkdir' into a single task.
                      </li>
                  </ul>
  
              </subsection>
  
              <subsection name="Command-line and Configuration Files">
  
                  <p>One of the goals of Ant 2 is to allow the user to easily customise and
                  extend Ant.  The command-line and local configuration files, are two places
                  where this would be done.  Currently, Myrmidon some customisation from the
                  command-line, but does not support configuration files.</p>
  
                  <ul>
  
                      <li>Load configuration from system (from $ANT_HOME) and user (from $HOME)
                      configuration files.</li>
  
                      <li>Allow the following via config files:
  
                          <ul>
                              <li>Add (or override) the
                                  <code>lib</code> and
                                  <code>ext</code> directories.
                              </li>
                              <li>Enable more than one listener, and configure the listeners from
                              the conents of the config file.</li>
                              <li>Import libraries, and set properties.</li>
                              <li>Execute tasks.</li>
                              <li>Install and configure runtime services.</li>
                          </ul>
                      </li>
  
                  </ul>
  
              </subsection>
  
              <subsection name="Scripting">
                  <p>Add the ability to extend Ant using languages other than
                  Java:</p>
                  <ul>
                      <li>Define a task using a scripting language such as Javascript.</li>
                      <li>Use Rhino's ability to implement Java interfaces, to
                      implement and define types, such as FileSelector, or
                      Condition.</li>
                      <li>Define a task using template.</li>
                      <li>Add some lightweight scripting tasks.</li>
                  </ul>
              </subsection>
  
              <subsection name="Documentation">
  
                  <p>Everyone loves writing documentation, and so a goal for Ant 2 is to
                  generate a lot of reference documentation for tasks and other types directly
                  from the source.  Unfortunately, there's still plenty of tutorial material
                  to write.  In particular we need these:</p>
  
                  <ul>
                      <li>User documentation - describing things like the build file format,
                      how properties work, how to use references, how sub-builds work, how to customise
                      Myrmidon, and so on.</li>
  
                      <li>Task writer documentation - describing things like an overview the task API,
                      how configuration works, task lifecycle, how to assemble an antlib, a catalog
                      of the runtime services, and so on.</li>
  
                      <li>Myrmidon developer documentation - a broad outline of the architecture,
                      how to build, how to test, and so on.  Also, this todo list needs plenty
                      of filling out.</li>
  
                  </ul>
  
              </subsection>
  
              <subsection name="Miscellaneous">
  
                  <p>A completely unordered list of items, big and small:</p>
  
                  <ul>
                      <li>Search through the code for 'TODO' items and fix them.</li>
                      <li>Allow service factories to be configured from the contents of the
  
                          <code>ant-services.xml</code> descriptor.
                      </li>
                      <li>Add verbosity level to ProjectListener LogEvent</li>
                      <li>Fire ProjectListener events taskFinished(), targetFinished() and
                      projectFinished() events on build failure, adding indicator methods to
                      ProjectEvent.</li>
                      <li>Fire ProjectListener events projectStarted() and projectFinished()
                      events on start and finish of referenced projects, adding indicator methods
                      to ProjectEvent.</li>
                      <li>Detect duplicate type names.</li>
                      <li>Add fully qualified type names, based on antlib name and type shorthand name.
                      Allow these to be used in build files in addition to the shorthand names.</li>
                      <li>Move the
                          <code>&lt;http&gt;</code> and
                          <code>&lt;socket&gt;</code>
                      conditions to an antlib.  Need to resolve how these will be passed a logger.
                      </li>
                      <li>Add an else block to the
                          <code>&lt;if&gt;</code> task.
                      </li>
                      <li>Move
                          <code>crimson.jar</code> to
                          <code>bin/lib</code> in the distribution,
                      and make available to other jars via the extension mechanism.
                      </li>
                      <li>Change <code>DefaultPropertyResolver</code> to ignore '$${'.</li>
                      <li>Add a <code>--type</code> command-line option, to allow
                          the project builder to be manually selected.
                      </li>
                      <li>Change <code>ProjectBuilder</code>
                          and <code>Embeddor</code> to throw something more
                          specialised than Exception.
                      </li>
                      <li>Change <code>DefaultClassLoaderManager</code> to handle
                          directories as part of a library classpath.
                      </li>
                      <li><code>&lt;condition&gt;</code> should set the property
                          value to <code>false</code> when the condition is false.</li>
                      <li>Split the <code>&lt;uptodate&gt;</code> condition into
                          a condition that checks against a single target file,
                          and one which checks using a destdir/mapper.</li>
                      <li>Add condition implementations to: check JVM version,
                          check Ant version, check whether a particular antlib or extension is
                          available, match a string against a regular expression.</li>
                      <li>Add a task to unset a property.</li>
                      <li>Change the various def and import task to allow a classpath
                          to be provided.</li>
                      <li>Unit tests.</li>
                  </ul>
  
              </subsection>
  
          </section>
  
      </body>
  </document>
  
  
  
  1.1                  jakarta-ant-myrmidon/site/src/xdocs/user.xml
  
  Index: user.xml
  ===================================================================
  <document>
  
  <properties>
  <author email="adammurdoch@apache.org">Adam Murdoch</author>
  <title>User Guide</title>
  </properties>
  
  <body>
  
  <section name="Building Myrmidon">
  
  <p>
  First, you will need to fetch the Myrmidon source from CVS.  The source
  can be found in the <code>proposal/myrmidon</code> directory of the
  Ant source tree.  You should check out the <code>jakarta-ant</code> CVS
  module, as described
  <a href="http://jakarta.apache.org/site/cvsindex.html">here</a>.
  </p>
  
  <p>
  To build Myrmidon, use the <code>build.xml</code> build script.  You will need
  to use Ant 1.4.1 or later.  The default target builds the Myrmidon distribution
  into the <code>dist</code> directory.  The distribution is a ready-to-run
  installation of Myrmidon.
  </p>
  
  <p>There are a number features that are not built unless the appropriate optional Jar
  files are found in the <code>lib</code> directory:</p>
  
  <table>
      <tr><th>Feature</th><th>Jar File</th><th>Download From</th></tr>
      <tr>
          <td>SMB VFS support (Samba, Windows shares)</td>
          <td>jcifs.jar</td>
          <td><a href="http://jcifs.samba.org">jcifs.samba.org</a>.
          <p>Note: there are problems using the 0.6.1 release.  Try 0.6.0 instead.</p></td>
      </tr>
      <tr>
          <td>FTP VFS support</td>
          <td>netcomponents.jar</td>
          <td><a href="http://www.savarese.org/oro/software/NetComponents.html">www.savarese.org</a></td>
      </tr>
  </table>
  
  </section>
  
  <section name="Running Myrmidon">
  
  <p>
  To run Myrmidon, use one of the following methods:
  </p>
  
  <subsection name="Launcher Script">
  
  <p>
  On Windows and Unix platforms, you can use the <code>ant</code> script
  in the distribution's <code>bin</code> directory.  The following environment
  variables can be used, but are not required (except on Windows 9x - see below).
  </p>
  
  <p>
  
  </p>
  
  <table>
      <tr><th>Variable</th><th>Description</th></tr>
      <tr>
          <td>JAVA_HOME</td>
          <td>The directory that the JDK is installed in.</td>
      </tr>
      <tr>
          <td>JAVACMD</td>
          <td>The command to use to start the JVM.  Defaults to <code>java</code>.</td>
      </tr>
      <tr>
          <td>ANT_HOME</td>
          <td>
              The directory containing the Myrmidon distribution.  This must be
              set when running on Windows 95, 98 or Me.
          </td>
      </tr>
  </table>
  
  </subsection>
  
  <subsection name="Executable Jar File">
  
  <p>
  The Myrmidon distribution includes an executable Jar file, which can be used
  to run Myrmidon.  Use the following command:
  </p>
  <pre>
  prompt> <i>java</i> -jar <i>ant-home</i>/bin/myrmidon-launcher.jar <i>options</i>
  </pre>
  
  </subsection>
  
  <p>When started, Myrmidon looks for a project file called <code>build.ant</code>
  in the current directory.  A different project file can be specified using the
  <code>-f</code> command-line option.  Myrmidon executes the targets that are
  listed on the command-line, or the default target if none is given.  For
  example, the following command executes targets <code>clean</code> and
  <code>build</code> from project file <code>my-project.xml</code>:</p>
  
  <pre>
  prompt> ant -f my-project.xml clean build
  </pre>
  
  <p>
  Run Myrmidon with the <code>-h</code> command-line option for a list of
  the command-line options that are available.
  </p>
  
  </section>
  
  </body>
  
  </document>
  
  
  
  1.1                  jakarta-ant-myrmidon/site/src/xdocs/velocity.properties
  
  Index: velocity.properties
  ===================================================================
  file.resource.loader.path=src/xdocs/stylesheets
  velocimacro.library=templates.vm
  
  
  
  1.1                  jakarta-ant-myrmidon/site/src/xdocs/vfs.xml
  
  Index: vfs.xml
  ===================================================================
  <document>
  
      <properties>
          <author email="adammurdoch@apache.org">Adam Murdoch</author>
          <title>VFS User Guide</title>
      </properties>
  
      <body>
  
          <section name="Handling Files">
  
              <p>Myrmidon includes a Virtual File System (VFS), which allows files from
              different sources to be treated identically.  The VFS currently supports
              the following file types:</p>
  
              <table>
                  <tr><th>File System</th><th>Description</th><th>URL Format</th></tr>
                  <tr>
                      <td>Local Files</td>
                      <td>Files on the local file system.</td>
                      <td>Three different formats are currently supported for local file names:
                          <ul>
                              <li><code>file://</code> <i>absolute-file-name</i></li>
                              <li>Absolute file names</li>
                              <li>Relative file names.  These are resolved relative to the
                              project's base directory.
                              </li>
                          </ul>
                      </td>
                  </tr>
                  <tr>
                      <td>Zip Files</td>
                      <td>The contents of Zip files (and Jar, War, and Ear files).
                      Currently, the VFS supports read-only access to Zip file contents.</td>
                      <td><code>zip:</code> <i>zip-file-uri</i> [<code>!</code><i>absolute-path</i>]</td>
                  </tr>
                  <tr>
                      <td>FTP</td>
                      <td>Files on an FTP server.</td>
                      <td><code>ftp://</code> [[<i>password</i><code>:</code>] <i>username</i><code>@</code>] <i>hostname</i> [<code>:</code><i>port</i>] [<i>absolute-path</i>]</td>
                  </tr>
                  <tr>
                      <td>SMB</td>
                      <td>Files on a CFIS server, such as Samba or Windows shares.</td>
                      <td><code>smb://</code> [[<i>password</i><code>:</code>] <i>username</i><code>@</code>] <i>hostname</i> [<code>:</code><i>port</i>] [<i>absolute-path</i>]</td>
                  </tr>
              </table>
  
              <p>Both forward or backward slashes can be used to separate the elements of
              a URL.</p>
  
              <p>Here are some example URLs:</p>
  
              <ul>
                  <li><code>build/classes</code></li>
                  <li><code>c:\program files\ant\bin</code></li>
                  <li><code>file://C:/program files/ant</code></li>
                  <li><code>zip:build/lib/ant.jar!/org/apache/tools</code></li>
                  <li><code>ftp://adam@somehost/pub/downloads</code></li>
                  <li><code>smb://password:adam@somehost/home/adam</code></li>
              </ul>
  
              <p>Currently, there are only a handful of VFS aware tasks.  This will grow
              as more tasks are ported to the new API, and data types.</p>
  
              <subsection name="File Sets">
  
                  <p>A file set in Myrmidon is more general than Ant 1's concept of a file set.
                  Firstly, there is more than one type of file set.  Secondly, they are VFS enabled.
                  File sets are automatically converted to a <a href="#Paths">path</a>, and so
                  can be used anywhere that a path can.</p>
  
                  <h3><code>&lt;v-fileset&gt;</code></h3>
  
                  <p>This is the equivalent of Ant 1's <code>&lt;fileset&gt;</code> (The name
                  is temporary, it will be changed to <code>&lt;fileset&gt;</code> once more
                  porting work as been completed).</p>
  
                  <p>Rather than use a set of include and exclude patterns to choose the files
                  that make up the file set, <code>&lt;v-fileset&gt;</code> takes zero or more
                  <a href="#File Selectors">file selectors</a>.  File selectors can be used to
                  select files based on any attribute of the file, rather than just the name.
                  You can use <code>&lt;name&gt;</code> selectors to achieve the same result
                  as using includes or excludes.</p>
  
                  <p>A <code>&lt;v-fileset&gt;</code> element takes the following attributes:</p>
  
                  <table>
                      <tr><th>Attribute</th><th>Description</th><th>Default Value</th></tr>
                      <tr>
                          <td>dir</td>
                          <td>The base directory for the file set.  This can be any URL that the
                          VFS supports.</td>
                          <td>Required</td>
                      </tr>
                  </table>
  
                  <p>A <code>&lt;v-fileset&gt;</code> element takes any number of nested
                  <a href="#File Selectors">file selector</a> elements.  To be included in the
                  file set, a file must be selected by all the file selectors.  That is, the
                  file selectors are implicitly AND-ed together.  If no file selector is provided,
                  all the files and directories are included in the set.</p>
  
                  <p>An example:</p>
  
                  <source><![CDATA[
  
  <v-fileset dir="src">
      <name pattern="org/apache/tools/ant/**"/>
      <is-file/>
  </v-fileset>
  ]]></source>
  
                  <h3><code>&lt;flat-fileset&gt;</code></h3>
  
                  <p>This file set takes a set of nested file sets and paths, and flattens them
                  into a single directory.  It can be used as a way of converting a path into a
                  file set.  It can also be used as a replacement for the <code>flatten</code>
                  attribute for the copy and move tasks.</p>
  
                  <p>A <code>&lt;flat-fileset&gt;</code> element takes no attributes, and a set
                  of nested paths or file sets.</p>
  
                  <p>An example:</p>
  
                  <source><![CDATA[
  
  <v-copy todir="dist/lib">
    <flat-fileset>
      <v-fileset dir="build/lib">
        <basename pattern="*.jar"/>
      <v-fileset>
      <v-path path="${classpath}"/>
    </flat-fileset>
  </v-copy>
  ]]></source>
                  <h3><code>&lt;mapped-fileset&gt;</code></h3>
  
                  <p>A fileset that applies a <a href="buildfile.html#File Name Mappers">file name mapper</a>
                      to a nested fileset.
                  </p>
  
              </subsection>
  
              <subsection name="Paths">
  
                  <p>Paths are an ordered list of files.</p>
  
                  <h3><code>&lt;v-path&gt;</code></h3>
  
                  <p>This is the equivalent of Ant 1's <code>&lt;path&gt;</code>.</p>
  
                  <h3><code>&lt;filtered-path&gt;</code></h3>
  
                  <p>A path that applies file selectors to a set of nested file sets and paths.</p>
  
              </subsection>
  
              <subsection name="File Selectors">
  
                  <p>File selectors are used to select files from file sets and paths.</p>
  
                  <h3><code>&lt;and&gt;</code></h3>
  
                  <p>Combines zero or more file selectors, using AND. An empty <code>&lt;and&gt;</code>
                  selector accepts all files.</p>
  
                  <h3><code>&lt;basename&gt;</code></h3>
  
                  <p>Selects files whose base name matches an Ant 1 style pattern, or a regular
                  expression.</p>
  
                  <h3><code>&lt;condition&gt;</code></h3>
  
                  <p>Takes a set of <a href="buildfile.html#Conditions">conditions</a>.  If
                  the conditions evaluate to true, then select every file.  Otherwise,
                  select no files.</p>
  
                  <h3><code>&lt;exists&gt;</code></h3>
  
                  <p>Selects files that exist.</p>
  
                  <h3><code>&lt;is-empty-folder&gt;</code></h3>
  
                  <p>Selects empty folders, that is, folders that have no children.</p>
  
                  <h3><code>&lt;is-folder&gt;</code></h3>
  
                  <p>Selects folders, does not select regular files.</p>
  
                  <h3><code>&lt;is-file&gt;</code></h3>
  
                  <p>Selects regular files, does not select folders.</p>
  
                  <h3><code>&lt;name&gt;</code></h3>
  
                  <p>Selects files whose path in a file set matches an Ant 1 style pattern, or
                  a regular expression.</p>
  
                  <h3><code>&lt;not&gt;</code></h3>
  
                  <p>Selects files that are not selected by a nested file selector.</p>
  
                  <h3><code>&lt;or&gt;</code></h3>
  
                  <p>Combines zero or more file selectors, using OR. An empty <code>&lt;or&gt;</code>
                  selector accepts all files.</p>
  
                  <h3><code>&lt;url&gt;</code></h3>
  
                  <p>Selects files whose URL matches an Ant 1 style pattern, or a regular expression.</p>
  
              </subsection>
  
          </section>
      </body>
  
  </document>
  
  
  
  1.1                  jakarta-ant-myrmidon/site/src/xdocs/stylesheets/docs.vsl
  
  Index: docs.vsl
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  
  <!-- Content Stylesheet for Site -->
  
      ## Defined variables
      #set ($bodybg = "#ffffff")
      #set ($bodyfg = "#000000")
      #set ($bodylink = "#525D76")
      #set ($bannerbg = "#525D76")
      #set ($bannerfg = "#ffffff")
      #set ($subbannerbg = "#828DA6")
      #set ($subbannerfg = "#ffffff")
      #set ($tablethbg = "#039acc")
      #set ($tabletdbg = "#a0ddf0")
  
  <!-- start the processing -->
  #document()
  <!-- end the processing -->
  
  ## This is where the common page macro's live
  
  #macro ( subsection $subsection)
    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="$subbannerbg">
        <font color="$subbannerfg" face="arial,helvetica,sanserif">
          #if ( $subsection.getAttributeValue("anchor") )
            #set ($anchor = $subsection.getAttributeValue("anchor"))
          #else
            #set ($anchor = $subsection.getAttributeValue("name"))
          #end
          <a name="$anchor"><strong>$subsection.getAttributeValue("name")</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
        #foreach ( $items in $subsection.getChildren() )
          #if ($items.getName().equals("img"))
            #image ($items)
          #elseif ($items.getName().equals("source"))
            #source ($items)
          #elseif ($items.getName().equals("table"))
            #table ($items)
          #else
            $xmlout.outputString($items)
          #end
        #end
        </blockquote>
      </td></tr>
    </table>
  #end
  
  #macro ( section $section)
    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="$bannerbg">
        <font color="$bannerfg" face="arial,helvetica,sanserif">
        #if ( $section.getAttributeValue("anchor") )
          #set ($anchor = $section.getAttributeValue("anchor"))
        #else
          #set ($anchor = $section.getAttributeValue("name"))
        #end
          <a name="$anchor"><strong>$section.getAttributeValue("name")</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
        #foreach ( $items in $section.getChildren() )
          #if ($items.getName().equals("img"))
            #image ($items)
          #elseif ($items.getName().equals("source"))
            #source ($items)
          #elseif ($items.getName().equals("table"))
            #table ($items)
          #elseif ($items.getName().equals("subsection"))
            #subsection ($items)
          #else
            $xmlout.outputString($items)
          #end
        #end
        </blockquote>
      </td></tr>
    </table>
  #end
  
  #macro (document)
    #header()
    #set ($allSections = $root.getChild("body").getChildren("section"))
    #foreach ( $section in $allSections )
      #section ($section)
    #end
    #footer()
  #end
  
  
  
  1.1                  jakarta-ant-myrmidon/site/src/xdocs/stylesheets/project.xml
  
  Index: project.xml
  ===================================================================
  <project name="Apache Myrmidon" href="http://jakarta.apache.org/ant/myrmidon">
  
      <title>Apache Myrmidon</title>
  
      <body>
          <menu name="Myrmidon">
              <item name="Introduction" href="/index.html"/>
              <item name="Get Involved" href="/getinvolved.html"/>
              <item name="Building Myrmidon" href="/user.html"/>
              <item name="Todo List" href="/todo.html"/>
          </menu>
  
          <menu name="User Guide">
              <item name="Project File" href="/buildfile.html"/>
              <item name="Virtual File System" href="/vfs.html"/>
              <item name="Ant 1 Compatibility Layer" href="/ant1compat.html"/>
              <item name="Differences to Ant 1" href="/differences.html"/>
              <item name="My First Task" href="/task.html"/>
          </menu>
  
          <menu name="Extending Ant">
              <item name="Configuration HOWTO" href="/configuring.html"/>
              <item name="Converter HOWTO" href="/converter.html"/>
              <item name="Type HOWTO" href="/type.html"/>
              <item name="ClassLoader HOWTO" href="/classloader.html"/>
              <item name="Library HOWTO" href="/librarys.html"/>
          </menu>
  
          <menu name="Container Design">
          </menu>
  
      </body>
  
  </project>
  
  
  
  1.1                  jakarta-ant-myrmidon/site/src/xdocs/stylesheets/templates.vm
  
  Index: templates.vm
  ===================================================================
  ## This is where the common macro's live
  
  #macro ( table $table)
    <table>
    #foreach ( $items in $table.getChildren() )
      #if ($items.getName().equals("tr"))
        #tr ($items)
      #end
    #end
    </table>
  #end
  
  #macro ( tr $tr)
    <tr>
    #foreach ( $items in $tr.getChildren() )
      #if ($items.getName().equals("td"))
        #td ($items)
      #elseif ($items.getName().equals("th"))
        #th ($items)
      #end
    #end
  </tr>
  #end
  
  #macro ( td $value)
    #if ($value.getAttributeValue("colspan"))
      #set ($colspan = $value.getAttributeValue("colspan"))
    #end
    #if ($value.getAttributeValue("rowspan"))
      #set ($rowspan = $value.getAttributeValue("rowspan"))
    #end
    <td bgcolor="$tabletdbg" colspan="$!colspan" rowspan="$!rowspan" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
      #if ($value.getText().length() != 0 || $value.hasChildren())
        $xmlout.outputString($value, true)
      #else
        &nbsp;
      #end
      </font>
    </td>
  #end
  
  #macro ( th $value)
    #if ($value.getAttributeValue("colspan"))
      #set ($colspan = $value.getAttributeValue("colspan"))
    #end
    #if ($value.getAttributeValue("rowspan"))
      #set ($rowspan = $value.getAttributeValue("rowspan"))
    #end
    <td bgcolor="$tablethbg" colspan="$!colspan" rowspan="$!rowspan" 
        valign="top" align="left">
      <font color="#000000" size="-1" face="arial,helvetica,sanserif">
      #if ($value.getText().length() != 0 || $value.hasChildren())
        $xmlout.outputString($value, true)
      #else
        &nbsp;
      #end
      </font>
    </td>
  #end
  
  #macro ( projectanchor $name $value )
    #if ($value.startsWith("http://"))
      <a href="$value">$name</a>
    #elseif ($value.startsWith("/site"))
      <a href="http://jakarta.apache.org$value">$name</a>
    #else
      <a href="$relativePath$value">$name</a>
    #end
  #end
  
  #macro ( metaauthor $author $email )
    <meta name="author" value="$author">
    <meta name="email" value="$email">
  #end
  
  #macro ( image $value )
    #if ($value.getAttributeValue("width"))
      #set ($width=$value.getAttributeValue("width"))
    #end
    #if ($value.getAttributeValue("height"))
      #set ($height=$value.getAttributeValue("height"))
    #end
    #if ($value.getAttributeValue("align"))
      #set ($align=$value.getAttributeValue("align"))
    #end
    <img src="$relativePath$value.getAttributeValue("src")" 
         width="$!width" height="$!height" align="$!align">
  #end
  
  #macro ( source $value)
    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#ffffff"><pre>$escape.getText($value.getText())</pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
        </tr>
      </table>
    </div>
  #end
  
  #macro ( makeProject )
    #set ($menus = $project.getChild("body").getChildren("menu"))
    #foreach ( $menu in $menus )
      <p><strong>$menu.getAttributeValue("name")</strong></p>
      <ul>
      #foreach ( $item in $menu.getChildren() )
        #set ($name = $item.getAttributeValue("name"))
        <li>#projectanchor($name $item.getAttributeValue("href"))</li>
      #end
      </ul>
    #end
  #end
  
  #macro (getProjectImage)
    #if ($project.getChild("logo"))
      <td align="left">
      <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" border="0"/></a>
      </td>
      <td align="right">
      #set ( $logoString = $project.getChild("logo").getAttributeValue("href") )
      #if ( $logoString.startsWith("/") )
        <a href="$project.getAttributeValue("href")"><img src="$relativePath$logoString" alt="$project.getChild("logo").getText()" border="0"/></a>
      #else
        <a href="$project.getAttributeValue("href")"><img src="$relativePath/$logoString" alt="$project.getChild("logo").getText()" border="0"/></a>
      #end
      </td>
    #else
      <td colspan="2">
      <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a>
      </td>
    #end
  #end
  
  #macro (header)
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    
        #set ($authors = $root.getChild("properties").getChildren("author"))
        #foreach ( $au in $authors )
          #metaauthor ( $au.getText() $au.getAttributeValue("email") )
        #end
    
        <title>$project.getChild("title").getText() - $root.getChild("properties").getChild("title").getText()</title>
      </head>
    
      <body bgcolor="$bodybg" text="$bodyfg" link="$bodylink">    
        <table border="0" width="100%" cellspacing="0">
          <!-- TOP IMAGE -->
          <tr>
            <td>#getProjectImage()</td>
            <td valign="bottom"><div align="right"><b><font size="+3" color="$bannerbg">$project.getChild("title").getText()</font></b></div></td>
          </tr>
        </table>
        <table border="0" width="100%" cellspacing="4">
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          
          <tr>
            <!-- LEFT SIDE NAVIGATION -->
            <td valign="top" nowrap="true">
            #makeProject()
            </td>
            <td align="left" valign="top">
  #end
  
  #macro (footer)
            </td>
          </tr>
  
          <!-- FOOTER -->
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          <tr><td colspan="2">
            <div align="center"><font color="$bodylink" size="-1"><em>
            Copyright &#169; 2000-2002, Apache Software Foundation
            </em></font></div>
          </td></tr>
        </table>
      </body>
    </html>
  #end
  
  
  

--
To unsubscribe, e-mail:   <mailto:ant-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:ant-dev-help@jakarta.apache.org>


Mime
View raw message