wood burning stoves 2.0*
The moose likes Ant, Maven and Other Build Tools and the fly likes Why use ANT? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Java 8 in Action this week in the Java 8 forum!
JavaRanch » Java Forums » Engineering » Ant, Maven and Other Build Tools
Bookmark "Why use ANT?" Watch "Why use ANT?" New topic
Author

Why use ANT?

Emnaki Chih
Ranch Hand

Joined: Sep 01, 2004
Posts: 30
Could someone please explain to me why one needs to build with ANT when one can compile and build a jar without it? Unlike c, java has auto dependency checking right? So why is ANT necessary?
dinesh Venkatesan
Ranch Hand

Joined: Oct 12, 2006
Posts: 134

Referred from http://ant.apache.org/


Apache Ant is a Java-based build tool. In theory, it is kind of like Make, but without Make's wrinkles.

Why another build tool when there is already make, gnumake, nmake, jam, 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 in 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.

Makefiles are inherently evil as well. Anybody who has worked on them for any time has run into the dreaded tab problem. "Is my command not executing because I have a space in front of my tab!!!" 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.

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.

Granted, this removes some of the expressive power that is inherent by being able to construct a shell command such as `find . -name foo -exec rm {}`, 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 <exec> task that allows different commands to be executed based on the OS that it is executing on.
Jesper de Jong
Java Cowboy
Saloon Keeper

Joined: Aug 16, 2005
Posts: 13884
    
  10

Because in a real project, where you have hundreds or maybe even thousands of classes, there generally isn't a single class that depends on all other classes, so you couldn't compile the whole project by simply compiling a single source file.

Also, Ant can do much more than simply compile Java files. There are a lot of different Ant tasks available to do anything from compiling and deploying to ftp'ing and copying around files. You can even write your own Ant tasks to perform custom actions.

Ofcourse you can compile projects and make JAR files without Ant. But it's much faster and easier to type "ant" <Enter> than to type in a whole list of long and cumbersome javac and jar commands every time you want to compile your project.


Java Beginners FAQ - JavaRanch SCJP FAQ - The Java Tutorial - Java SE 7 API documentation
Scala Notes - My blog about Scala
ismail hassani
Greenhorn

Joined: Feb 20, 2006
Posts: 9
You can use ant not only to build large projects,but also to generate code for many framworks based on java like struts,spring,ejb 2.0 and others,so using ant will make your devellopement go faster and will make you independant of a special IDE,and that can bes useful if you switch from a project to another.
[ January 14, 2007: Message edited by: ismail hassani ]
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Why use ANT?
 
Similar Threads
About ".classpath" file in the project
What exactly do "framework" and "engine" mean?
Running Ant from Console App
How to use JUnit with Eclipse ?
Maven and CruiseControl