<body>

<p>This package contains a set of <code>Task</code> implementations for
<em>Ant (version 1.4 or later)</em> that can be used to interact with the
Manager application to install, reload, and remove web applications from
a running instance of Tomcat.  For more information, see
<a href="http://jakarta.apache.org/tomcat/tomcat-4.0-doc/manager-howto.html">
http://jakarta.apache.org/tomcat/tomcat-4.0-doc/manager-howto.html</a>.</p>

<p>The attributes of each task element correspond
exactly to the request parameters that are included with an HTTP request
sent directly to the Manager application.  They are summarized as follows:
</p>

<table>
  <tr>
    <th align="center" width="15%">Attribute</th>
    <th align="center" width="85%">Description</th>
  </tr>
  <tr>
    <td align="center">url</td>
    <td>
      The URL of the Manager web application you will use to
      perform the requested operations.  If not specified, defaults to
      <code>http://localhost:8080/manager</code> (which corresponds
      to a standard installation of Tomcat 5).
    </td>
  </tr>
  <tr>
    <td align="center">username</td>
    <td>
      The username of a Tomcat user that has been configured with the
      <code>manager</code> role, as required to execute Manager
      application commands.  This attribute is required.
    </td>
  </tr>
  <tr>
    <td align="center">password</td>
    <td>
      The password of a Tomcat user that has been configured with the
      <code>manager</code> role, as required to execute Manager
      application commands.  This attribute is required.
    </td>
  </tr>
  <tr>
    <td align="center">config</td>
    <td>
      A URL pointing at the context configuration file (i.e. a file
      containing only the <code>&lt;Context&gt;</code> element, and
      its nested elements, from <code>server.xml</code> for a particular
      web application).  This attribute is supported only on the
      <code>install</code> target, and is required only if you wish to
      install an application with non-default configuration characteristics.
    </td>
  </tr>
  <tr>
    <td align="center">path</td>
    <td>
      The context path (including the leading slash) of the web application
      this command is intended to manage, or a zero-length string for the
      ROOT web application.  This attribute is valid for the
      <code>install</code>, <code>reload</code>, <code>remove</code>,
      <code>start</code>, and <code>stop</code> tasks only, and is
      required in all of those cases.
    </td>
  </tr>
  <tr>
    <td align="center">war</td>
    <td>
      A <code>jar:</code> URL that points at a web application archive (WAR)
      file, or a <code>file:</code> URL that points at an unpacked directory
      containing the web application.  This attribute is supported only on
      the <code>install</code> target.  You must specify at least one of the
      <code>config</code> and <code>war</code> attributes; if you specify
      both, the <code>war</code> attribute overrides the <code>docBase</code>
      attribute in the context configuration file.
    </td>
  </tr>
</table>

<p><strong>NOTE</strong> - Commands executed through the <em>Manager</em>
application are <strong>NOT</strong> reflected in updates to the Tomcat
<code>server.xml</code> configuration file, so they do not persist past the
next time you restart the entire Tomcat container.</p>

</body>
