<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<link rel="stylesheet" type="text/css" href="stylesheets/style.css">
<title>Apache Ant 1.8.5 User Manual</title>
</head>

<body bgcolor="#FFFFFF">
<div align="center"> 
  <h1><img src="images/ant_logo_large.gif" width="190" height="120"></h1>
  <h1>Apache Ant&trade; 1.8.5 Manual</h1>
  <p align="left">This is the manual for version 1.8.5 of 
  <a target="_top" href="http://ant.apache.org/index.html">Apache Ant</a>. 
    If your version 
    of Ant (as verified with <tt>ant -version</tt>) is older or newer than this 
    version then this is not the correct manual set. Please use the documentation 
    appropriate to your current version. Also, if you are using a version
    older than the most recent release, we recommend an upgrade to fix bugs
    as well as provide new functionality. </p>
  <p>&nbsp;</p>

  <p align="left">Ant's manual and API documentation is part of
    the <a href="http://ant.apache.org/bindownload.cgi">binary</a>
    distributions or available as a
    separate <a href="http://ant.apache.org/manualdownload.cgi">archive</a>.
    Manuals for older releases are available for
    download
    <a href="http://ant.apache.org/bindownload.cgi#Old Ant Releases">as
      well</a>.</p>

  <p>Apache Ant, Apache Ivy, Ant, Ivy, Apache, the Apache feather logo, and the Apache Ant project logos are trademarks of The Apache Software Foundation.</p>
</div>


</body>
</html>
