blob: 8c2b0c64c3288e3b25348aab3f3258827a75402c [file] [log] [blame]
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<title>Apache Ant User Manual - Introduction</title>
<link rel="stylesheet" type="text/css" href="stylesheets/antmanual.css">
</head>
<body>
<h1><a name="introduction">Introduction</a></h1>
<p>Apache Ant is a Java-based build tool. In theory, it is kind of like
<i>make</i>, without <i>make</i>'s wrinkles.</p>
<h3>Why?</h3>
<p>Why another build tool when there is already
<i>make</i>,
<i>gnumake</i>,
<i>nmake</i>,
<i>jam</i>,
and
others? Because all those tools have limitations that Ant's original author
couldn't live with when developing software across multiple platforms.
Make-like
tools are inherently shell-based: they evaluate a set of dependencies,
then execute commands not unlike what you would issue on a shell.
This means that you
can easily extend these tools by using or writing any program for the OS that
you are working on; however, this also means that you limit yourself to the OS,
or at least the OS type, such as Unix, that you are working on.</p>
<p>Makefiles are inherently evil as well. Anybody who has worked on them for any
time has run into the dreaded tab problem. &quot;Is my command not executing
because I have a space in front of my tab?!!&quot; said the original author of
Ant way too many times. Tools like Jam took care of this to a great degree, but
still have yet another format to use and remember.</p>
<p>Ant is different. Instead of a model where it is extended with shell-based
commands, Ant is extended using Java classes. Instead of writing shell commands,
the configuration files are XML-based, calling out a target tree where various
tasks get executed. Each task is run by an object that implements a particular
Task interface.</p>
<p>Granted, this removes some of the expressive power that is inherent in being
able to construct a shell command such as
<nobr><code>`find . -name foo -exec rm {}`</code></nobr>, but it
gives you the ability to be cross-platform - to work anywhere and
everywhere. And
hey, if you really need to execute a shell command, Ant has an
&lt;exec&gt; task that
allows different commands to be executed based on the OS it is executing
on.</p>
<hr>
<p align="center">Copyright &copy; 2000-2002 Apache Software Foundation. All rights
Reserved.</p>
</body>
</html>