<!--
   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>Installing Apache Ant</title>
</head>

<body>
<h1>Installing Apache Ant</h1>
<h2><a name="getting">Getting Apache Ant</a></h2>

<h3>The Short Story</h3>
<p>To get up and running with the binary edition of Ant quickly, follow these steps:
<ol>
<li>Make sure you have a Java environment installed, See <a href="#sysrequirements">System
Requirements</a> for details.</li>
<li>Download Ant. See <a href="#getBinary">Binary Edition</a> for details.</li>
<li>Uncompress the downloaded file into a directory.</li>
<li>Set environmental variables <code>JAVA_HOME</code> to your Java environment, <code>ANT_HOME</code> to
the directory you uncompressed Ant to, and add <code>${ANT_HOME}/bin</code> (Unix) or
<code>%ANT_HOME%/bin</code> (Windows) to your <code>PATH</code>. See <a href="#setup">Setup</a> for details.</li>
<li>Optionally, from the <code>ANT_HOME</code> directory run <code>ant -f fetch.xml -Ddest=system</code> to get
the library dependencies of most of the Ant tasks that require them. If you don't do this, many of the dependent
Ant tasks will not be available. See <a href="#optionalTasks">Optional Tasks</a> for details and other options
for the -Ddest parameter.</li>
<li>Optionally, add any desired Antlibs. See <a href="http://ant.apache.org/antlibs/proper.html" target="_top">Ant Libraries</a> for a list.
</ol>
</p>
<p>
Note that the links in the list above will give more details about each of the steps,
should you need them. Or you can just continue reading the rest of this document.
</p>
The short story for working with the Ant source code (not needed if you are working with the binary edition) is:
<ol>
<li>Get the source code. See <a href="#sourceEdition">Source Edition</a> for details.</li>
<li> Build Ant. See <a href="#buildingant">Building Ant</a> for details.</li>
</ol>
<p>
</p>
<p>
For the full story, continue reading.
</p>

<h3><a name="getBinary">Binary Edition</a></h3>

<p>The latest stable version of Ant is available from the Ant web page <a
href="http://ant.apache.org/" target="_top">http://ant.apache.org/</a>
</p>

<p>The binary edition of Ant is shipped with 3 different compression formats:
<ol>
<li><b>.zip</b> - Recommended compression format for Windows, can also be used on other platforms. Supported
by many programs and some operating systems natively.</li>
<li><b>.tar.gz</b> - Uses the tar program to gather files together, and gzip to compress and uncompress.</li>
<li><b>.tar.bz2</b> - Uses the tar program to gather files together, and bzip2 to compress and uncompress..</li>
</ol>
Choose the format that is best supported for your platform.
</p>

<h3>As a binary in an RPM Package</h3>

<p>Consult the <a href="#jpackage">jpackage</a> section below.</p>

<h3>Bundled in IDEs</h3>
<p>
    All the main Java IDEs ship with Ant, products such as Eclipse, NetBeans
    and IntelliJ IDEA. If you install Ant this way you usually get the most recent
    release of Ant at the time the IDE was released. Some of the IDEs (Eclipse
    and NetBeans in particular) ship with extra tasks that only work if
    IDE-specific tools are on Ant's path. To use these on command-line versions
    of Ant, the relevant JARs need to be added to the command-line Ant as
    extra libraries/tasks. Note that if it is an IDE task or extension that is
    not behaving, the Ant team is unable to field bug reports. Try the IDE mailing
    lists first, who will cross-file bugs if appropriate.
</p>
<p>
    IDE's can invariably be pointed at different Ant installations. This lets
    developers upgrade to a new release of Ant, and eliminate inconsistencies
    between command-line and IDE Ant.
</p>

<h3>Bundled in Java applications</h3>

<p>
    Many Java applications, most particularly application servers, ship with
    a version of Ant. These are primarily for internal use by the application,
    using the Java APIs to delegate tasks such as JSP page compilation to the Ant
    runtime. Such distributions are usually unsupported by everyone. Particularly
    troublesome are those products that not only ship with their own Ant release,
    they add their own version of ANT.BAT or ant.sh to the PATH. If Ant starts
    behaving wierdly after installing something, try the
    <a href="#diagnostics">diagnostics</a> advice.
</p>

<h3><a name="sourceEdition">Source Edition</a></h3>

<p>If you prefer the source edition, you can download the source for the latest
Ant release from
<a href="http://ant.apache.org/srcdownload.cgi" target="_top">http://ant.apache.org/srcdownload.cgi</a>.

If you prefer the leading-edge code, you can access
the code as it is being developed via SVN. The Ant website has details on
<a href="http://ant.apache.org/svn.html" target="_top">accessing SVN</a>.
All bug fixes will go in against the HEAD of the source tree, and the first
response to many bugreps will be "have you tried the latest version".
Don't be afraid to download and build a prererelease edition, as everything
other than new features are usually stable.
    </p>
<p>


See the section <a href="#buildingant">Building Ant</a> on how to
build Ant from the source code.
You can also access the
<a href="http://svn.apache.org/viewcvs.cgi/ant/" target="_top">
Ant SVN repository</a> on-line. </p>

<h3 name="archives">Archive Download Area Layout</h3>
<p>
Older versions of Ant are available in the archives at <a
href="http://archive.apache.org/dist/ant/" target="_top">http://archive.apache.org/dist/ant/</a>. The
files are organized as follows.
</p>
<table>
<tr>
  <th>Filename or Path</th>
  <th>Description</th>
</tr>
<tr>
  <td>KEYS</td>
  <td>PGP-Keysfile. It contains the PGP-keys of Ant developers so you can 'trust' the distribution. </td>
</tr>
<tr>
  <td>RELEASE-NOTES-{version}.html</td>
  <td>
    Release notes of the given version in HTML format. When upgrading your Ant installation you
    should have a look at the <i>Changes that could break older environments</i> section.
  </td>
</tr>
<tr>
  <td>ant-current-bin.zip</td>
  <td>
    ZIP-Archive containing the compiled version of Ant in the last released version. It is recommended that
    you do not download the latest version this way, as the standard way of downloading described above will
    redirect you to a mirror closer to you, thus making the download faster for you and reducing the load
    on Apache servers.
  </td>
</tr>
<tr>
  <td>ant-current-src.zip</td>
  <td>
    ZIP-Archive containing the sources of Ant. If you have this you could compile Ant itself.
    If you do not have the <i>required</i> dependencies, the classes depending on them are just not
    built. Again, it is preferred to use the standard way of getting the source package described above
    to make your download quicker and to reduce the load on Apache servers.
  </td>
</tr>
<tr>
  <td>ant-current-*.asc</td>
  <td>
    Security file for checking the correctness of the zip file. This one is the
    <a href="http://en.wikipedia.org/wiki/Pretty_Good_Privacy" target="_blank">PGP</a> key.
  </td>
</tr>
<tr>
  <td>ant-current-*.md5</td>
  <td>
    Security file for checking the correctness of the zip file. This one is the
    <a href="http://en.wikipedia.org/wiki/Md5" target="_blank">MD5</a> key.
  </td>
</tr>
<tr>
  <td>ant-current-*.sha1</td>
  <td>
    Security file for checking the correctness of the zip file. This one is the
    <a href="http://en.wikipedia.org/wiki/SHA-1" target="_blank">SHA1</a> key.
  </td>
</tr>
<tr>
  <td>antlibs/</td>
  <td>
    This directory holds the Antlibs that are made of available by the Apache Ant project.
    Antlibs are bundles of Ant tasks that are not delivered as part of the Ant core but are
    available as optional downloads.
  </td>
</tr>
<tr>
  <td>binaries/</td>
  <td>
    The binaries directory holds specific Ant releases bundled in both ZIP and tar.gz compression
    formats. The named releases are in contrast to the ant-current-bin.zip file in the parent
    directory, which is always guaranteed to be the most current release of Ant.
  </td>
</tr>
<tr>
  <td>common/</td>
  <td>
    The common directory holds various files, such as the Apache License file that Ant is licensed
    under, that people may wish to examine without having to download the whole Ant distribution.
  </td>
</tr>
<tr>
  <td>source/</td>
  <td>
    The source directory holds the source code for specific Ant releases bundled in both ZIP and
    tar.gz compression formats. The named releases are in contrast to the ant-current-src.zip file
    in the parent directory, which is always guaranteed to hold the source code for the most current
    release of Ant.
  </td>
</tr>
</table>

<hr>
<h2><a name="sysrequirements">System Requirements</a></h2>
Ant has been used successfully on many platforms, including Linux,
commercial flavours of Unix such as Solaris and HP-UX,
Windows NT-platforms, OS/2 Warp, Novell Netware 6, OpenVMS and MacOS X.
The platforms used most for development are, in no particular order,
Linux, MacOS X, Windows XP and Unix; these are therefore that platforms
that tend to work best. As of Ant1.7, Windows 9x is no longer supported.

<p>
For the current version of Ant, you will also need a JDK installed on
your system, version 1.4 or later required, 1.5 or later strongly recommended.
The later the version of Java , the more Ant tasks you get.
</p>
<p>
  <strong>Note: </strong>If a JDK is not present, only the JRE runtime, then many tasks will not work.
</p>
<p>
  <strong>Note: </strong>
  Ant 1.8.* works with jdk1.4 and higher, Ant 1.7.* works with jdk1.3 and higher, Ant 1.6.* works with jdk 1.2 and higher,
  Ant 1.2 to Ant 1.5.* work with jdk 1.1 and higher.
</p>

<h3>Open Source Java Runtimes</h3>
<p>
    The Ant team strongly supports users running Ant on Kaffe and other
    open source Java runtimes, and so strives to have a product that works
    well on those platforms. What appears to work well is Kaffe with
    Gnu Classpath and the Xerces and Xalan libraries.
</p>
<hr>
<h2><a name="installing">Installing Ant</a></h2>
<p>The binary distribution of Ant consists of the following directory layout:
<pre>
  ant
   +--- README, LICENSE, fetch.xml, other text files. //basic information
   +--- bin  // contains launcher scripts
   |
   +--- lib  // contains Ant jars plus necessary dependencies
   |
   +--- docs // contains documentation
   |      |
   |      +--- images  // various logos for html documentation
   |      |
   |      +--- manual  // Ant documentation (a must read ;-)
   |
   +--- etc // contains xsl goodies to:
            //   - create an enhanced report from xml output of various tasks.
            //   - migrate your build files and get rid of 'deprecated' warning
            //   - ... and more ;-)
</pre>

Only the <code>bin</code> and <code>lib</code> directories are
required to run Ant.

To install Ant, choose a directory and copy the distribution
files there. This directory will be known as ANT_HOME.
</p>

<table width="80%">
<tr>
  <td colspan="2">
    <b>Windows 95, Windows 98 &amp; Windows ME Note:</b>
  </td>
</tr>
<tr>
  <td width="5%">&nbsp;</td>
  <td><i>
Note that current releases of Ant no longer support these systems. If you are using an older
version of Ant,  however, the script used to launch Ant will have
problems if ANT_HOME is a long filename (i.e. a filename which is not
of the format known as &quot;8.3&quot;). This is due to
limitations in the OS's handling of the <code>&quot;for&quot;</code>
batch-file statement. It is recommended, therefore, that Ant be
installed in a <b>short</b>, 8.3 path, such as C:\Ant. </i>
  </td>
</tr>
<tr>
  <td width="5%">&nbsp;</td>
  <td>
    <p>On these systems you will also need to configure more environment
       space to cater for the environment variables used in the Ant launch script.
       To do this, you will need to add or update the following line in
       the <code>config.sys</code> file
    </p>
    <p><code>shell=c:\command.com c:\ /p /e:32768</code></p>
  </td>
</tr>
</table>

<h3><a name="setup">Setup</a></h3>
<p>
Before you can run Ant there is some additional set up you
will need to do unless you are installing the <a href="#jpackage">RPM
version from jpackage.org</a>:</p>
<ul>
<li>Add the <code>bin</code> directory to your path.</li>
<li>Set the <code>ANT_HOME</code> environment variable to the
directory where you installed Ant.  On some operating systems, Ant's
startup scripts can guess <code>ANT_HOME</code> (Unix dialects and
Windows NT/2000), but it is better to not rely on this behavior.</li>
<li>Optionally, set the <code>JAVA_HOME</code> environment variable
(see the <a href="#advanced">Advanced</a> section below).
This should be set to the directory where your JDK is installed.</li>
</ul>
<p>Operating System-specific instructions for doing this from the command
line are in the <a href="#windows">Windows</a>, <a href="#bash">Linux/Unix (bash)</a>,
and <a href="#tcshcsh">Linux/Unix (csh)</a> sections. Note that using this method,
the settings will only be valid for the command line session you run them in.</p>
<p><strong>Note:</strong> Do not install Ant's ant.jar file into the lib/ext
directory of the JDK/JRE. Ant is an application, whilst the extension
directory is intended for JDK extensions. In particular there are security
restrictions on the classes which may be loaded by an extension.</p>

<table width="80%">
<tr>
  <td colspan="2">
    <b>Windows Note:</b>
  </td>
</tr>
<tr>
  <td width="5%">&nbsp;</td>
  <td>
    The ant.bat script makes use of three environment variables -
    ANT_HOME, CLASSPATH and JAVA_HOME. <b>Ensure</b> that ANT_HOME and JAVA_HOME variables are set,
    and that they do <b><u>not</u></b> have quotes (either
    ' or &quot;) and they do <b><u>not</u></b> end with \ or with /. CLASSPATH should be unset or
    empty.
  </td>
</tr>
</table>

<h3><a name="checkInstallation">Check Installation</a></h3>
<p>You can check the basic installation with opening a new shell and typing <tt>ant</tt>. You
should get a message like this
<pre>
Buildfile: build.xml does not exist!
Build failed
</pre>
So Ant works. This message is there because you need to write an individual buildfile for your
project. With a <tt>ant -version</tt> you should get an output like
<pre>
Apache Ant version 1.7.1 compiled on June 27 2008
</pre>
</p>
<p>If this does not work ensure your environment variables are set right. They must resolve to:
<ul>
  <li>required: %ANT_HOME%\bin\ant.bat</li>
  <li>optional: %JAVA_HOME%\bin\java.exe</li>
  <li>required: %PATH%=...<i>maybe-other-entries</i>...;%ANT_HOME%\bin;...<i>maybe-other-entries</i>...</li>
</ul>
<b>ANT_HOME</b> is used by the launcher script for finding the libraries.
<b>JAVA_HOME</b> is used by the launcher for finding the JDK/JRE to use. (JDK is recommended as some tasks
require the java tools.) If not set, the launcher tries to find one via the %PATH% environment variable.
<b>PATH</b> is set for user convenience. With that set you can just start <i>ant</i> instead of always typing
<i>the/complete/path/to/your/ant/installation/bin/ant</i>.
</p>

<h3><a name="optionalTasks">Optional Tasks</a></h3>
<p>Ant supports a number of optional tasks. An optional task is a task which
typically requires an external library to function. The optional tasks are
packaged together with the core Ant tasks.</p>

<p>The external libraries required by each of the optional tasks is detailed
in the <a href="#librarydependencies">Library Dependencies</a> section. These external
libraries must be added to Ant's classpath, in any of the following ways:
</p>
<ul>
    <li><p>
        In <code><i>ANT_HOME</i>/lib</code>. This makes the JAR files available to all
        Ant users and builds.
    </p></li>

    <li><p>
        In <code>${user.home}/.ant/lib</code> (as of Ant 1.6). This
        allows different users to add new libraries to Ant. All JAR files
        added to this directory are available to command-line Ant.
    </p></li>

    <li><p>
        On the command line with a <code>-lib</code> parameter. This lets
        you add new JAR files on a case-by-case basis.
    </p></li>

    <li><p>
        In the <code>CLASSPATH</code> environment variable. Avoid this; it makes
        the JAR files visible to <i>all</i> Java applications, and causes
        no end of support calls. See <a href="#classpath">below</a> for details.
        </p>
    </li>

    <li><p>
        In some <code>&lt;classpath&gt;</code> accepted by the task itself.
        For example, as of Ant 1.7.0 you can run the <code>&lt;junit&gt;</code>
        task without <code>junit.jar</code> in Ant's own classpath, so long as
        it is included (along with your program and tests) in the classpath
        passed when running the task.
        </p><p>
        Where possible, this option is generally
        to be preferred, as the Ant script itself can determine the best path
        to load the library from: via relative path from the basedir (if you
        keep the library under version control with your project), according
        to Ant properties, environment variables, Ivy downloads, whatever you like.
    </p></li>

</ul>

<p>
    If you are using the binary version of Ant, or if you are working from source
    code, you can easily gather most of the dependencies and install them for use
    with your Ant tasks. In your <code>ANT_HOME</code> directory you should see a
    file called <code>fetch.xml</code>. This is an Ant script that you can run to
    install almost all the dependencies the optional Ant tasks need.
</p>

<p>
    To do so, change to the <code>ANT_HOME</code> directory and execute the command:
</p>

<blockquote>
  <pre>ant -f fetch.xml -Ddest=<i>[option]</i></pre>
</blockquote

<p>
    where option is one of the following, as described above:
    <ul>
        <li><code>system</code> - store in Ant's lib directory <i>(Recommended)</i></li>
        <li><code>user</code> - store in the user's home directory</li>
        <li><code>optional</code> - store in Ant's source code lib/optional directory, used if building Ant source code</li>
    </ul>
</p>

<p>
  You may also need to set proxy settings. See the <a href="#proxy">Proxy Settings</a> section for details.
</p>

<p>
Note that not all dependencies are gathered using <code>fetch.xml</code>. Tasks that depend on
commercial software, in particular, will require you to have the commercial software installed
in order to be used.
</p>

<p>The Apache Ant Project also provides additional tasks and types that are available as separately
downloaded Ant Libraries. You can see the the list of available Antlibs at
the <a href="http://ant.apache.org/antlibs/proper.html" target="_top">Ant Libraries</a> page.
</p>

<p>You can also find tasks and types provided by third-party projects at the
<a href="http://ant.apache.org/external.html" target="_top">External Tools and Tasks</a> page.
</p>

<p>
    IDEs have different ways of adding external JAR files and third-party tasks
    to Ant. Usually it is done by some configuration dialog. Sometimes JAR files
    added to a project are automatically added to ant's classpath.
</p>

<h3><a name="classpath">The <code>CLASSPATH</code> environment variable</a></h3>
<p>

The <code>CLASSPATH</code> environment variable is a source of many Ant support queries. As
the round trip time for diagnosis on the Ant user mailing list can be slow, and
because filing bug reports complaining about 'ant.bat' not working will be
rejected by the developers as WORKSFORME "this is a configuration problem, not a
bug", you can save yourself a lot of time and frustration by following some
simple steps.

</p>
<ol>

<li>Do not ever set <code>CLASSPATH</code>. Ant does not need it, it only causes confusion
and breaks things.

</li>

<li>If you ignore the previous rule, do not ever, ever, put quotes in the
<code>CLASSPATH</code>, even if there is a space in a directory. This will break Ant, and it
is not needed. </li>

<li>If you ignore the first rule, do not ever, ever, have a trailing backslash
in a <code>CLASSPATH</code>, as it breaks Ant's ability to quote the string. Again, this is
not needed for the correct operation of the <code>CLASSPATH</code> environment variable, even
if a DOS directory is to be added to the path. </li>

<li>You can stop Ant using the <code>CLASSPATH</code> environment variable by setting the
<code>-noclasspath</code> option on the command line. This is an easy way
to test for classpath-related problems.</li>

</ol>

<p>

The usual symptom of <code>CLASSPATH</code> problems is that ant will not run with some error
about not being able to find <code>org.apache.tools.ant.launch.Launcher</code>, or, if you have got the
quotes/backslashes wrong, some very weird Java startup error. To see if this is
the case, run <code>ant -noclasspath</code> or unset the <code>CLASSPATH</code> environment
variable.

</p>

<p>
You can also make your Ant script reject this environment
variable just by placing the following at the top of the script (or in an init target):
</p>
<pre>
&lt;property environment="env."/&gt;
&lt;property name="env.CLASSPATH" value=""/&gt;
&lt;fail message="Unset $CLASSPATH / %CLASSPATH% before running Ant!"&gt;
    &lt;condition&gt;
        &lt;not&gt;
            &lt;equals arg1="${env.CLASSPATH}" arg2=""/&gt;
        &lt;/not&gt;
    &lt;/condition&gt;
&lt;/fail&gt;
</pre>

<h3><a name="proxy">Proxy Configuration</a></h3>

<p> Many Ant built-in and third-party tasks use network connections to retrieve
files from HTTP servers. If you are behind a firewall with a proxy server, then
Ant needs to be configured with the proxy. Here are the different ways to do
this. </p>

<ul>

<li><b>With Java1.5</b><br>

<p>
When you run Ant on Java1.5, you could try to use the automatic proxy setup
mechanism with <code>-autoproxy</code>.
</p>

</li>

<li><b>With explicit JVM properties.</b><br>
<p>
These are documented <a
href="http://download.oracle.com/javase/1.5.0/docs/guide/net/properties.html" target="_top">by Oracle</a>,
and control the proxy behaviour of the entire JVM. To set them in Ant, declare
them in the <code>ANT_OPTS</code> environment variable. This is the best option
for a non-mobile system. For a laptop, you have to change these settings as you
roam. To set ANT_OPTS:
</p>
<blockquote>
<p>
  For csh/tcsh:
</p>
<pre>
    setenv ANT_OPTS "-Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080"
</pre>
<p>
  For bash:
</p>
<pre>
    export ANT_OPTS="-Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080"
</pre>
<p>
  For Windows, set the environment variable in the appropriate dialog box
  and open a new console. or, by hand
</p>
<pre>
    set ANT_OPTS = -Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080
</pre>
</p>
</blockquote>
</li>

<li><b>In the build file itself</b><br>

<p>
If you are writing a build file that is always to be used behind the firewall,
the &lt;setproxy&gt; task lets you configure the proxy (which it does by setting
the JVM properties). If you do this, we strongly recommend using ant properties
to define the proxy host, port, etc, so that individuals can override the
defaults.</li>
</p>

</ul>

<p> The Ant team acknowledges that this is unsatisfactory. Until the JVM
automatic proxy setup works properly everywhere, explicit JVM options via
ANT_ARGS are probably the best solution. Setting properties on Ant's
command line do not work, because those are <i>Ant properties</i> being set, not
JVM options. This means the following does not set up the command line:

</p>

<pre>ant -Dhttp.proxyHost=proxy -Dhttp.proxyPort=81</pre>

<p> All it does is set up two Ant properties.</p>

<p>One other troublespot with
proxies is with authenticating proxies. Ant cannot go beyond what the JVM does
here, and as it is very hard to remotely diagnose, test and fix proxy-related
problems, users who work behind a secure proxy will have to spend much time
configuring the JVM properties until they are happy. </p>


<h3><a name="windows">Windows and OS/2</a></h3>
<p>Assume Ant is installed in <code>c:\ant\</code>. The following sets up the
environment:</p>
<pre>set ANT_HOME=c:\ant
set JAVA_HOME=c:\jdk-1.5.0.05
set PATH=%PATH%;%ANT_HOME%\bin</pre>

<h3><a name="bash">Linux/Unix (bash)</a></h3>
<p>Assume Ant is installed in <code>/usr/local/ant</code>. The following sets up
the environment:</p>
<pre>export ANT_HOME=/usr/local/ant
export JAVA_HOME=/usr/local/jdk-1.5.0.05
export PATH=${PATH}:${ANT_HOME}/bin</pre>

<h3><a name="tcshcsh">Linux/Unix (csh)</a></h3>
<pre>setenv ANT_HOME /usr/local/ant
setenv JAVA_HOME /usr/local/jdk/jdk-1.5.0.05
set path=( $path $ANT_HOME/bin )</pre>

<p>
Having a symbolic link set up to point to the JVM/JDK version makes updates more seamless. </p>
<a name="jpackage"></a>
<h3>RPM version from jpackage.org</h3>
<p>
The <a href="http://www.jpackage.org" target="_top">JPackage project</a> distributes an RPM version of Ant.
With this version, it is not necessary to set <code> JAVA_HOME </code>or
<code> ANT_HOME </code>environment variables and the RPM installer will correctly
place the Ant executable on your path.
</p>
  <p>
    <b>NOTE:</b> <em>Since Ant 1.7.0</em>, if the <code>ANT_HOME</code>
    environment variable is set, the jpackage distribution will be
    ignored.
  </p>
  <p>
Optional jars for the JPackage version are handled in two ways.  The easiest, and
best way is to get these external libraries from JPackage if JPackage has them
available.  (Note: for each such library, you will have to get both the external
package itself (e.g. <code>oro-2.0.8-2jpp.noarch.rpm</code>) and the small library that links
ant and the external package (e.g. <code>ant-apache-oro-1.6.2-3jpp.noarch.rpm</code>).
</p><p>
However, JPackage does not package proprietary software, and since some of the
optional packages depend on proprietary jars, they must be handled as follows.
This may violate the spirit of JPackage, but it is necessary if you need these proprietary packages.
For example, suppose you want to install support for netrexx, which jpackage does not
support:
<ol>
<li>Decide where you want to deploy the extra jars.  One option is in <code>$ANT_HOME/lib</code>,
which, for JPackage is usually <code>/usr/share/ant/lib</code>.  Another, less messy option
is to create an <code>.ant/lib</code> subdirectory of your home directory and place your
non-jpackage ant jars there, thereby avoiding mixing jpackage
libraries with non-jpackage stuff in the same folder.
More information on where Ant finds its libraries is available
<a href="http://ant.apache.org/manual/running.html#libs">here</a></li>
<li>Download a non-jpackage binary distribution from the regular
    <a href="http://ant.apache.org/bindownload.cgi" target="_top">Apache Ant site</a></li>
<li>Unzip or untar the distribution into a temporary directory</li>
<li>Copy the linking jar, in this case <code>ant-jai.jar</code>, into the library directory you
chose in step 1 above.</li>
<li>Copy the proprietary jar itself into the same directory.</li>
</ol>
Finally, if for some reason you are running on a system with both the JPackage and Apache versions of Ant
available, if you should want to run the Apache version (which will have to be specified with an absolute file name,
not found on the path), you should use Ant's <code>--noconfig</code> command-line switch to avoid JPackage's classpath mechanism.


<h3><a name="advanced">Advanced</a></h3>

<p>There are lots of variants that can be used to run Ant. What you need is at
least the following:</p>
<ul>
<li>The classpath for Ant must contain <code>ant.jar</code> and any jars/classes
needed for your chosen JAXP-compliant XML parser.</li>
<li>When you need JDK functionality
(such as for the <a href="Tasks/javac.html">javac</a> task or the
<a href="Tasks/rmic.html">rmic</a> task), then <code>tools.jar</code>
must be added. The scripts supplied with Ant,
in the <code>bin</code> directory, will add
the required JDK classes automatically, if the <code>JAVA_HOME</code>
environment variable is set.</li>

<li>When you are executing platform-specific applications, such as the
<a href="Tasks/exec.html">exec</a> task or the
<a href="Tasks/cvs.html">cvs</a> task, the property <code>ant.home</code>
must be set to the directory containing where you installed Ant. Again
this is set by the Ant scripts to the value of the ANT_HOME environment
variable.</li>
</ul>
The supplied ant shell scripts all support an <tt>ANT_OPTS</tt>
environment variable which can be used to supply extra options
to ant. Some of the scripts also read in an extra script stored
in the users home directory, which can be used to set such options. Look
at the source for your platform's invocation script for details.

<hr>
<h2><a name="buildingant">Building Ant</a></h2>
<p>To build Ant from source, you can either install the Ant source distribution
or checkout the ant module from SVN. See <a href="#sourceEdition">Source Edition</a> for details.</p>
<p>Once you have installed the source, change into the installation
directory.</p>

<p>Set the <code>JAVA_HOME</code> environment variable
to the directory where the JDK is installed.
See <a href="#installing">Installing Ant</a>
for examples on how to do this for your operating system. </p>

<p><b>Note</b>: The bootstrap process of Ant requires a greedy
compiler like Sun's javac or jikes.  It does not work with gcj or
kjc.</p>

<p>Make sure you have downloaded any auxiliary jars required to
build tasks you are interested in. These should be
added to the <code>lib/optional</code>
directory of the source tree.
See <a href="#librarydependencies">Library Dependencies</a>
for a list of JAR requirements for various features.
Note that this will make the auxiliary JAR
available for the building of Ant only. For running Ant you will
still need to
make the JARs available as described under
<a href="#installing">Installing Ant</a>.</p>

<p>You can also get most of the auxiliary jar files (ie. the jar files
that various optional Ant tasks depend on) by running Ant on the
<code>fetch.xml</code> build file. See <a href="#optionalTasks">Optional
Tasks</a> for instructions on how to do this.
</p>

<p>As of version 1.7.0 Ant has a hard dependency on JUnit. The <code>fetch.xml</code> build
  script will download JUnit automatically, but if you don't use this you must
  install it manually into <code>lib/optional</code> (download it from
  <a href="http://junit.org/" target="_top">JUnit.org</a>) if you are
  using a source distribution of Ant.</p>

<p>Your are now ready to build Ant:</p>
<blockquote>
  <p><code>build -Ddist.dir=&lt;<i>directory_to_contain_Ant_distribution</i>&gt; dist</code>&nbsp;&nbsp;&nbsp;&nbsp;(<i>Windows</i>)</p>
  <p><code>sh build.sh -Ddist.dir=&lt;<i>directory_to_contain_Ant_distribution</i>&gt; dist</code>&nbsp;&nbsp;&nbsp;&nbsp;(<i>Unix</i>)</p>
</blockquote>

<p>This will create a binary distribution of Ant in the directory you specified.</p>

<p>The above action does the following:</p>
<ul>

<li>If necessary it will bootstrap the Ant code. Bootstrapping involves the manual
compilation of enough Ant code to be able to run Ant. The bootstrapped Ant is
used for the remainder of the build steps. </li>

<li>Invokes the bootstrapped Ant with the parameters passed to the build script. In
this case, these parameters define an Ant property value and specify the &quot;dist&quot; target
in Ant's own <code>build.xml</code> file.</li>

<li>Create the ant.jar and ant-launcher.jar JAR files</li>

<li>Create optional JARs for which the build had the relevant libraries. If
a particular library is missing from ANT_HOME/lib/optional, then the matching
ant- JAR file will not be created. For example, ant-junit.jar is only built
if there is a junit.jar in the optional directory.</li>
</ul>

<p>On most occasions you will not need to explicitly bootstrap Ant since the build
scripts do that for you. If however, the build file you are using makes use of features
not yet compiled into the bootstrapped Ant, you will need to manually bootstrap.
Run <code>bootstrap.bat</code> (Windows) or <code>bootstrap.sh</code> (UNIX)
to build a new bootstrap version of Ant.</p>

If you wish to install the build into the current <code>ANT_HOME</code>
directory, you can use:
<blockquote>
  <p><code>build install</code>&nbsp;&nbsp;&nbsp;&nbsp;(<i>Windows</i>)</p>
  <p><code>sh build.sh install</code>&nbsp;&nbsp;&nbsp;&nbsp;(<i>Unix</i>)</p>
</blockquote>

You can avoid the lengthy Javadoc step, if desired, with:
<blockquote>
  <p><code>build install-lite</code>&nbsp;&nbsp;&nbsp;&nbsp;(<i>Windows</i>)</p>
  <p><code>sh build.sh install-lite</code>&nbsp;&nbsp;&nbsp;&nbsp;(<i>Unix</i>)</p>
</blockquote>
This will only install the <code>bin</code> and <code>lib</code> directories.
<p>Both the <code>install</code> and
<code>install-lite</code> targets will overwrite
the current Ant version in <code>ANT_HOME</code>.</p>

<p>Ant's build script will try to set executable flags for its shell
  scripts on Unix-like systems.  There are various reasons why the
  chmod-task might fail (like when you are running the build script as
  a different user than the one who installed Ant initially).  In this
  case you can set the Ant property <code>chmod.fail</code> to false
  when starting the build like in
<blockquote>
  <p><code>sh build.sh install -Dchmod.fail=false</code></p>
</blockquote>
and any error to change permission will not result in a build failure.</p>

<hr>
<h2><a name="librarydependencies">Library Dependencies</a></h2>
<p>The following libraries are needed in Ant's classpath
if you are using the
indicated feature. Note that only one of the regexp libraries is
needed for use with the mappers
(and Java includes a regexp implementation which
Ant will find automatically).
You will also need to install the particular
Ant optional jar containing the task definitions to make these
tasks available. Please refer to the <a href="#optionalTasks">
Installing Ant / Optional Tasks</a> section above.</p>

<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td><b>Jar Name</b></td>
    <td><b>Needed For</b></td>
    <td><b>Available At</b></td>
  </tr>
  <tr>
    <td>jakarta-regexp-1.3.jar</td>
    <td>regexp type with mappers (if you do not wish to use java.util.regex)</td>
    <td><a href="http://attic.apache.org/projects/jakarta-regexp.html" target="_top">http://attic.apache.org/projects/jakarta-regexp.html</a></td>
  </tr>
  <tr>
    <td>jakarta-oro-2.0.8.jar</td>
    <td>regexp type with mappers (if you do not wish to use java.util.regex)<br>
    To use the FTP task,
you need jakarta-oro 2.0.8 or later, and <a href="#commons-net">commons-net</a></td>
    <td><a href="http://attic.apache.org/projects/jakarta-oro.html" target="_top">http://attic.apache.org/projects/jakarta-oro.html</a></td>
  </tr>
  <tr>
    <td>junit.jar</td>
    <td><code>&lt;junit&gt;</code> task. May be in classpath passed to task rather than Ant's classpath.</td>
    <td><a href="http://www.junit.org/" target="_top">http://www.junit.org/</a></td>
  </tr>
  <tr>
    <td>xalan.jar</td>
    <td>junitreport task</td>
    <td><a href="http://xml.apache.org/xalan-j/" target="_top">http://xml.apache.org/xalan-j/</a></td>
  </tr>
  <tr>
    <td>antlr.jar</td>
    <td>antlr task</td>
    <td><a href="http://www.antlr.org/" target="_top">http://www.antlr.org/</a></td>
  </tr>
  <tr>
    <td>bsf.jar</td>
    <td>script task
      <p>
        <strong>Note</strong>: Ant 1.6 and later require Apache BSF, not
        the IBM version.  I.e. you need BSF 2.3.0-rc1 or later.
      </p>
      <p>
        <strong>Note</strong>: BSF 2.4.0 is needed to use a post 1.5R3 version
        of rhino's javascript.
      </p>
      <p>
        <strong>Note</strong>: BSF 2.4.0 uses jakarta-commons-logging
        so it needs the commons-logging.jar.
      </p>
      </td>
    <td><a href="http://jakarta.apache.org/bsf/" target="_top">http://jakarta.apache.org/bsf/</a></td>
  </tr>
  <tr>
    <td>Groovy jars</td>
    <td>Groovy with script and scriptdef tasks<br>
      You need to get the groovy jar and two asm jars from a groovy
      installation. The jars are groovy-[version].jar, asm-[version].jar and
      asm-util-[version].jar and antlr-[version].jar.
      As of groovy version 1.0-JSR-06, the jars are
      groovy-1.0-JSR-06.jar, antlr-2.7.5.jar, asm-2.2.jar and asm-util-2.2.jar.
      Alternatively one may use the embedded groovy jar file.
      This is located in the embedded directory of the groovy distribution.
      This bundles all the needed jar files into one jar file.
      It is called groovy-all-[version].jar.
    </td>
    <td>
      <a href="http://groovy.codehaus.org/" target="_top">http://groovy.codehaus.org/</a>
      <br>
      The asm jars are also available from the creators of asm -
      <a href="http://asm.objectweb.org/" target="_top">http://asm.objectweb.org/</a>
    </td>
  </tr>
  <tr>
    <td>netrexx.jar</td>
    <td>netrexx task, Rexx with the script task</td>
    <td><a href="http://www.ibm.com/software/awdtools/netrexx/download.html" target="_top">
        http://www.ibm.com/software/awdtools/netrexx/download.html</a></td>
  </tr>
  <tr>
    <td>js.jar</td>
    <td>Javascript with script task<br>
    If you use Apache BSF 2.3.0-rc1, you must use rhino 1.5R3 (later
    versions of BSF (e.g. version 2.4.0) work with 1.5R4 and higher).</td>
    <td><a href="http://www.mozilla.org/rhino/" target="_top">http://www.mozilla.org/rhino/</a></td>
  </tr>
  <tr>
    <td>jython.jar</td>
    <td>Python with script task<br>
    Warning : jython.jar also contains classes from jakarta-oro.
    Remove these classes if you are also using jakarta-oro.</td>
    <td><a href="http://jython.sourceforge.net/" target="_top">http://jython.sourceforge.net/</a></td>
  </tr>
  <tr>
    <td>jpython.jar</td>
    <td>Python with script task <b>deprecated, jython is the preferred engine</b></td>
    <td><a href="http://www.jpython.org/" target="_top">http://www.jpython.org/</a></td>
  </tr>
  <tr>
    <td>jacl.jar and tcljava.jar</td>
    <td>TCL with script task</td>
    <td><a href="http://www.scriptics.com/software/java/" target="_top">http://www.scriptics.com/software/java/</a></td>
  </tr>
  <tr>
    <td>BeanShell JAR(s)</td>
    <td>BeanShell with script task.
      <br>
    <strong>Note</strong>: Ant requires BeanShell version 1.3 or
      later</td>
    <td><a href="http://www.beanshell.org/" target="_top">http://www.beanshell.org/</a></td>
  </tr>
  <tr>
    <td>jruby.jar</td>
    <td>Ruby with script task</td>
    <td><a href="http://jruby.org/" target="_top">http://jruby.org/</a></td>
  </tr>
  <tr>
    <td>judo.jar</td>
    <td>Judoscript with script task</td>
    <td><a href="http://www.judoscript.org/" target="_top">http://www.judoscript.org/</a></td>
  </tr>
  <tr>
    <td>commons-logging.jar</td>
    <td>CommonsLoggingListener</td>
    <td><a href="http://commons.apache.org/logging/"
           target="_top">http://commons.apache.org/logging/</a></td>
  </tr>
  <tr>
    <td>log4j.jar</td>
    <td>Log4jListener</td>
    <td><a href="http://logging.apache.org/log4j/"
           target="_top">http://logging.apache.org/log4j/</a></td>
  </tr>
  <tr>
    <td><a name="commons-net">commons-net.jar</a></td>
    <td>ftp, rexec and telnet tasks<br>
    jakarta-oro 2.0.8 or later is required together with commons-net 1.4.0.<br>
    For all users, a minimum version of commons-net of 1.4.0 is recommended.  Earlier
    versions did not support the full range of configuration options, and 1.4.0 is needed
    to compile Ant.
    </td>
    <td><a href="http://commons.apache.org/net/"
           target="_top">http://commons.apache.org/net/</a></td>
  </tr>
  <tr>
    <td>bcel.jar</td>
    <td>classfileset data type,
        JavaClassHelper used by the ClassConstants filter reader and
        optionally used by ejbjar for dependency determination
    </td>
    <td><a href="http://commons.apache.org/bcel/" target="_top">http://commons.apache.org/bcel/</a></td>
  </tr>
  <tr>
    <td>mail.jar</td>
    <td>Mail task with Mime encoding, and the MimeMail task</td>
    <td><a href="http://www.oracle.com/technetwork/java/index-jsp-139225.html"
        target="_top">http://www.oracle.com/technetwork/java/index-jsp-139225.html</a></td>
  </tr>
  <tr>
    <td>activation.jar</td>
    <td>Mail task with Mime encoding, and the MimeMail task</td>
    <td><a href="http://www.oracle.com/technetwork/java/javase/jaf-135115.html"
        target="_top">http://www.oracle.com/technetwork/java/javase/jaf-135115.html</a></td>
  </tr>
  <tr>
    <td>jdepend.jar</td>
    <td>jdepend task</td>
    <td><a href="http://www.clarkware.com/software/JDepend.html"
        target="_top">http://www.clarkware.com/software/JDepend.html</a></td>
  </tr>
  <tr>
    <td>resolver.jar <b>1.1beta or later</b></td>
    <td>xmlcatalog datatype <em>only if support for external catalog files is desired</em></td>
    <td><a href="http://xml.apache.org/commons/"
    target="_top">http://xml.apache.org/commons/</a>.</td>
  </tr>
  <tr>
    <td>jsch.jar <b>0.1.50 or later</b></td>
    <td>sshexec and scp tasks</td>
    <td><a href="http://www.jcraft.com/jsch/index.html"
        target="_top">http://www.jcraft.com/jsch/index.html</a></td>
  </tr>
  <tr>
    <td>JAI - Java Advanced Imaging</td>
    <td>image task</td>
    <td><a href="https://jai.dev.java.net/"
        target="_top">https://jai.dev.java.net/</a></td>
  </tr>
</table>
<br>
<h2><a name="Troubleshooting">Troubleshooting</a></h2>


<h3><a name="diagnostics">Diagnostics</a></h3>

<p> Ant has a built in diagnostics feature. If you run <code>ant
-diagnostics</code> ant will look at its internal state and print it out. This
code will check and print the following things. </p>

<ul>

<li>Where Ant is running from. Sometimes you can be surprised.</li>

<li>The version of ant.jar and of the ant-*.jar containing the optional tasks -
    and whether they match</li>

<li>Which JAR files are in ANT_HOME/lib

<li>Which optional tasks are available. If a task is not listed as being
available, either it is not present, or libraries that it depends on are
absent.</li>


<li>XML Parser information</li>

<li>JVM system properties
</li>

<li>The status of the temp directory. If this is not writable, or its clock is
horribly wrong (possible if it is on a network drive), a lot of tasks will fail
with obscure error messages.</li>

<li>The current time zone as Java sees it. If this is not what it should be for
your location, then dependency logic may get confused.

</ul>

<p>
    Running <code>ant -diagnostics</code> is a good way to check that ant is
    installed. It is also a first step towards self-diagnosis of any problem.
    Any configuration problem reported to the user mailing list will probably
    result ins someone asking you to run the command and show the results, so
    save time by using it yourself.
</p>

<p>
    For under-IDE diagnostics, use the &lt;diagnostics&gt; task to run the same
    tests as an ant task. This can be added to a diagnostics target in a build
    file to see what tasks are available under the IDE, what the XML parser and
    classpath is, etc.
</p>

<h3><a name="ant-user">user mailing list</a></h3>

<p> If you cannot get Ant installed or working, the Ant user mailing list is the
best place to start with any problem. Please do your homework first, make sure
that it is not a <a href="#classpath"><code>CLASSPATH</code></a> problem, and run a <a
href="#diagnostics">diagnostics check</a> to see what Ant thinks of its own
state. Why the user list, and not the developer list?
Because there are more users than developers, so more people who can help you. </p>

<p>

Please only file a bug report against Ant for a configuration/startup problem if
there really is a fixable bug in Ant related to configuration, such as it not
working on a particular platform, with a certain JVM version, etc, or if you are
advised to do it by the user mailing list.
</p>




</body>
</html>
