<!DOCTYPE html>
<!--
   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

       https://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 lang="en">

<head>
<link rel="stylesheet" type="text/css" href="stylesheets/style.css">
<title>Apache Ant 1.10.10 User Manual</title>
</head>

<body>
  <h1 class="center"><img src="images/ant_logo_large.gif" width="190" height="120" alt="Apache Ant logo"></h1>
  <h1 class="center">Apache Ant&trade; 1.10.10 Manual</h1>
  <p>This is the manual for version 1.10.10 of <a href="https://ant.apache.org/" target="_top">Apache Ant</a>. If your
    version of Ant (as verified with <kbd>ant -version</kbd>) 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>Ant's manual and API documentation is part of the <a href="https://ant.apache.org/bindownload.cgi"
     target="_top">binary</a> distributions or available as a
     separate <a href="https://ant.apache.org/manualdownload.cgi" target="_top">archive</a>.  Manuals for older releases
     are available for download <a href="https://ant.apache.org/bindownload.cgi#Old%20Ant%20Releases" target="_top">as
     well</a>.</p>

  <p class="center">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>


</body>
</html>
