<!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.14User 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.14 Manual</h1>
  <p>This is the manual for version 1.10.14 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>
