

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
   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 lang="en">
    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
    <head>
      <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Apache Ant - Welcome</title>
        <link type="text/css" href="./page.css" rel="stylesheet">
          <meta name="author" content="Conor MacNeill">
  <meta name="email" content="">
        <meta name="author" content="Stefan Bodewig">
  <meta name="email" content="stefan.bodewig@freenet.de">
      </head>

    <body>
      <p class="navpath">
        <script src="./breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
      </p>

      <div class="logobar">
        <table width="100%" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td align="left"><img border="0" alt="Apache Ant site" src="./images/group-logo.gif"></td>
            <td align="center" width="100%"><img alt="Apache Ant logo" border="0" src="./images/project-logo.gif"></td>
            <td align="right">
              <form target="_blank" onsubmit="q.value = query.value + ' site:ant.apache.org'" action="http://www.google.com/search" method="get">
                <table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F">
                  <tr>
                    <td colspan="3"><img height="10" width="1" alt="" src="./images/spacer.gif"></td>
                  </tr>
                  <tr>
                    <td><img height="1" width="1" alt="" src="./images/spacer.gif"></td>
                    <td nowrap="nowrap" class="searchcaption">
                      <input name="q" type="hidden">
                      <input size="15" id="query" type="text">
                      <img height="1" width="5" alt="" src="./images/spacer.gif">
                      <input name="Search" value="Search" type="submit">
                      <br>
                      the Apache Ant site
                    </td>
                    <td><img height="1" width="1" alt="" src="./images/spacer.gif"></td>
                  </tr>
                  <tr>
                    <td><img alt="" border="0" height="10" width="9" src="./images/search-left.gif"></td>
                    <td><img height="1" width="1" alt="" src="./images/spacer.gif"></td>
                    <td><img alt="" border="0" height="10" width="9" src="./images/search-right.gif"></td>
                  </tr>
                </table>
              </form>
            </td>
          </tr>
        </table>
      </div>

                  <div class="tab">
              <table summary="tab bar" border="0" cellpadding="0" cellspacing="0">
                <tr>
                                  <td width="8"><img alt="" height="5" width="8" src="./images/spacer.gif"></td><td valign="bottom">
                      <table summary="selected tab" style="height: 1.5em" border="0" cellpadding="0" cellspacing="0">
                        <tr>
                        <td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="./images/tabSel-left.gif"></td><td valign="middle" bgcolor="#4C6C8F"><font color="#ffffff" size="2" face="Arial, Helvetica, Sans-serif"><b>Home</b></font></td><td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="./images/tabSel-right.gif"></td>
                        </tr>
                      </table>
                    </td>
                                    <td width="5"><img alt="" height="8" width="8" src="./images/spacer.gif"></td><td valign="bottom">
                      <table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0">
                        <tr>
                          <td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="./images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="./projects/index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Projects</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="./images/tab-right.gif"></td>
                        </tr>
                      </table>
                    </td>
                            </tr>
              </table>
            </div>

      <div class="bluebar"></div>
                    
  <div class="menucontainer">
    <div class="menu">
      <ul>
              <li class="menuheader">Apache Ant
          <ul>
                            <li>
                              <span class="sel">Welcome</span>
                              </li>
                            <li>
                                    <a href="http://www.apache.org/licenses/LICENSE-2.0.html">License</a>
                                </li>
                            <li>
                                    <a href="./antnews.html">News</a>
                                </li>
                      </ul>
        </li>
              <li class="menuheader">Documentation
          <ul>
                            <li>
                                    <a href="./manual/index.html">Manual</a>
                                </li>
                            <li>
                                    <a href="./projects.html">Related Projects</a>
                                </li>
                            <li>
                                    <a href="./external.html">External Tools and Tasks</a>
                                </li>
                            <li>
                                    <a href="./resources.html">Resources</a>
                                </li>
                            <li>
                                    <a href="./faq.html">Frequently Asked Questions</a>
                                </li>
                            <li>
                                    <a href="http://wiki.apache.org/ant/FrontPage">Wiki</a>
                                </li>
                            <li>
                                    <a href="./problems.html">Having Problems?</a>
                                </li>
                      </ul>
        </li>
              <li class="menuheader">Download
          <ul>
                            <li>
                                    <a href="http://ant.apache.org/bindownload.cgi">Binary Distributions</a>
                                </li>
                            <li>
                                    <a href="http://ant.apache.org/srcdownload.cgi">Source Distributions</a>
                                </li>
                            <li>
                                    <a href="http://ant.apache.org/manualdownload.cgi">Ant Manual</a>
                                </li>
                      </ul>
        </li>
              <li class="menuheader">Contributing
          <ul>
                            <li>
                                    <a href="./mail.html">Mailing Lists</a>
                                </li>
                            <li>
                                    <a href="./svn.html">Subversion Repositories</a>
                                </li>
                            <li>
                                    <a href="./nightlies.html">Nightly+Continuous Builds</a>
                                </li>
                            <li>
                                    <a href="./bugs.html">Bug Database</a>
                                </li>
                            <li>
                                    <a href="http://www.apache.org/security/">Security</a>
                                </li>
                      </ul>
        </li>
              <li class="menuheader">Sponsorship
          <ul>
                            <li>
                                    <a href="http://www.apache.org/foundation/thanks.html">Thanks</a>
                                </li>
                            <li>
                                    <a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
                                </li>
                      </ul>
        </li>
              <li class="menuheader">Project Management
          <ul>
                            <li>
                                    <a href="./contributors.html">Contributors</a>
                                </li>
                            <li>
                                    <a href="./mission.html">Apache Ant Mission</a>
                                </li>
                            <li>
                                    <a href="./bylaws.html">Project Bylaws</a>
                                </li>
                            <li>
                                    <a href="./legal.html">Legal</a>
                                </li>
                      </ul>
        </li>
            </ul>
    </div>
    <center>
    <a href="http://www.apache.org/events/current-event.html"><img border="0" title="ApacheCon" alt="ApacheCon - logo" src="http://www.apache.org/events/current-event-125x125.png" style="width: 125px;height: 125px;"></a>
    </center>
    <img style="float: left" height="10" width="10" border="0" alt="" src="./images/menu-left.gif">
    <img style="float: right" height="10" width="10" border="0" alt="" src="./images/menu-right.gif">
  </div>
      <div class="lightbluebar">&nbsp;</div>
  <div class="main">
  <div class="content">
    <h1 class="title">Welcome</h1>
            <h3 class="section">
      <a name="Apache Ant&amp;#x2122;"></a>
      Apache Ant&#x2122;
    </h3>
                        <p>Apache Ant is a Java library and command-line tool who's
		mission is to drive processes described in build files as targets
		and extension points dependent upon each other.
		The main known usage of Ant is the build of Java applications.
		Ant supplies a number of built-in tasks allowing to compile, assemble,
		test and run Java applications.
		Ant can also be used effectively to build non Java applications, for
		instance C or C++ applications. More generally, Ant can be used to
		pilot any type of process which can be described in terms of targets
		and tasks.
    </p>
                                <p>
		Ant is written in Java. Users of Ant can develop their own
		"antlibs" containing Ant tasks and types, and are offered 
		a large number of ready-made commercial or open-source "antlibs".
    </p>
                                <p>
		Ant is extremely flexible and does not impose coding conventions or
		directory layouts to the Java projects which adopt it as a build tool.
	</p>
                                <p>
		Software development projects looking for a solution combining build tool and
		dependency management can use Ant in combination with <a href="http://ant.apache.org/ivy/">Apache Ivy</a>.
</p>
                                <p>The Apache Ant project is part of
          the <a href="http://www.apache.org/">Apache Software
          Foundation</a>.</p>
                        <h3 class="section">
      <a name="Apache Ant1.8.2"></a>
      Apache Ant1.8.2
    </h3>
                        <h3>December 27th, 2010 - Apache Ant 1.8.2 Released</h3>
                                <p>Apache Ant 1.8.2 is now available for download as source or binary (with and without
      dependencies) from
      <a href="http://ant.apache.org/bindownload.cgi">http://ant.apache.org/bindownload.cgi</a>.</p>
                                <p>Key features of the 1.8.2 release are</p>
                                <ul>
      <li>performance improvements in directory scanning</li>
      <li>XSLT task honors classpath again (bugrep 49271)</li>
      <li>distinction between core tasks and optional tasks is abolished</li>
      <li>numerous bug fixes and improvements as documented in Bugzilla
        and in WHATSNEW</li>
     </ul>
                        <h3 class="section">
      <a name="Apache Ivy 2.2.0"></a>
      Apache Ivy 2.2.0
    </h3>
                        <h3>September 30, 2010 - Apache Ivy 2.2.0 Released</h3>
                                <p>Apache Ivy 2.2.0 is now available for download as source or binary (with and without
      dependencies) from
      <a href="http://ant.apache.org/ivy/download.cgi">http://ant.apache.org/ivy/download.cgi</a>.</p>
                                <p>Key features of the 2.2.0 release are</p>
                                <ul>
      <li>enhanced Maven2 compatibility, with several bug fixes and
        more pom features covered</li>
      <li>new parent mechanism for Ivy files</li>
      <li>improved pom generation from an ivy.xml file</li>
      <li>automated PGP signature generation when uploading artifacts</li>
      <li>numerous bug fixes and improvements as documented in Jira
        and in the release notes</li>
    </ul>
                                <p>For more information see
      the <a href="http://ant.apache.org/ivy/">Ivy home page</a>.</p>
                        <h3 class="section">
      <a name="Apache AntUnit 1.1"></a>
      Apache AntUnit 1.1
    </h3>
                        <h3>September 26, 2008 - Apache AntUnit 1.1 Released</h3>
                                <p>Apache AntUnit 1.1 is now available for download as <a href="http://ant.apache.org/antlibs/bindownload.cgi">binary</a>
      or <a href="http://ant.apache.org/antlibs/srcdownload.cgi">source</a>
      release.</p>
                                <p>In addition to a few bugfixes and some new assertions AntUnit
      1.1 allows test listeners to receive the log output of the
      project under test.  Both plainlistener and xmllistener have
      an option that makes them echo the project's output into their
      respective logs.</p>
                                <p>For more information see the <a href="antlibs/antunit/">Antlib's
        home page</a></p>
                        <h3 class="section">
      <a name="Documentation"></a>
      Documentation
    </h3>
                        <p>
You can view the documentation for the current release (Apache Ant 1.8.1)
<a href="manual/index.html">online</a>
</p>
                                <p>
Comprehensive documentation is included in the source and binary distributions.
</p>
                        <h3 class="section">
      <a name="Get Involved"></a>
      Get Involved
    </h3>
                        <ul>
<li><a href="http://jakarta.apache.org/getinvolved/getinvolvedindex.html">Get Involved</a></li>
<li><a href="mail.html">Join Mailing Lists</a></li>
<li><a href="http://marc.info/?l=ant-dev&amp;r=1&amp;w=2">Search the Dev Mailing List</a>
</li>
<li><a href="http://marc.info/?l=ant-user&amp;r=1&amp;w=2">Search the User Mailing List</a>
</li>
</ul>
                
    </div>
  </div>

        <p class="copyright">
      Apache Ant, Apache Ivy, Ant, Ivy, Apache, the Apache feather logo, and the Apache Ant project logos are trademarks of The Apache Software Foundation.
        <script type="text/javascript" language="JavaScript"><!--
                document.write(" - "+"Last Published: " + document.lastModified);
              //  -->
        </script>
      </p>
    </body>
  </html>















