views:

792

answers:

4

I've been trying to understand what Ant is used for but i still don't get it.

Can someone give me one use case for which Ant is used for, something I can try to see why Ant is useful and what kind of things I can use it for?

I do Java development in Eclipse and I'm just getting started with servlets and Google Web Toolkit.

+5  A: 

Ant is a build tool. Say for example you have several projects in your Eclipse workspace, all of which are pieces of a larger application. To build it all into a jar file with dependencies included, you could select all the projects and export them as a jar file, but that's somewhat cumbersome.

Ant is an extensible solution. You define the build process in XML, and ant compiles your java files according to this recipe.

Ant can do more than building, too. I worked at a company where the mechanism for deployment was Debian packages in our own repository. We had Ant scripts that would build the jar files, arrange them and some metadata files into a Debian package, put them into the repository, and re-generate the repository manifest.

As with anything Java, there's a lot of configuration you need to get your head around before you're proficient with Ant, but some of the basic tutorials should give you an idea of what you're getting yourself into.

Ted Dziuba
+2  A: 

Ant is used, as any build tool is, to automate the repetitive tasks of building your code.

Rather than run javac each time by hand you put a command into an Ant script and then when you run ant it will run javac for you.

My typical build process with ant goes something like this:

  • run javac on the source
  • run javac on the tets
  • run the cobertura instrumentation on the source (this is for code coverage)
  • jar up the classes from the source
  • jar up the cobertura instrumented classes
  • jar up the unit test classes
  • run checkstyle, pmd, findbugs on the source to find warnings
  • run the unit tests via cobertura to get code coverage of them

So that is 8 steps that I have done on each build that I can do simply by running "ant".

TofuBeer
A: 

Ant is an XML-based make file.

You won't see much benefit using Ant if you're a single developer who already builds and packages code successfully using an IDE like Eclipse.

The larger benefit comes when you have a team collaborating on code. Then you'll get a big boost if you use Cruise Control or some other continuous integration facility. CC requires an Ant build.xml.

duffymo
A: 

This is from the ANT documentation and explains it pretty well.

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 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.

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 in 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 task that allows different commands to be executed based on the OS it is executing on.

ReneS