Gant is a build tool for scripting Ant tasks using Groovy instead of XML to specify the build logic. A Gant build specification is a Groovy script and so can bring all the power of Groovy to bear directly, something not possible with Ant scripts. Whilst it might be seen as a competitor to Ant, Gant uses Ant tasks for many of the actions, so Gant is really an alternative way of doing builds using Ant, but using a programming language rather than XML to specify the build rules.
Here is an example Gant script:
In this script there are two targets, stuff and otherStuff -- the default target for this build is designated as stuiff and is the target run when Gant is executed from the command line with no target as parameter.
Targets are closures so they can be called as functions, in which case they are executed as you expect, or they can be dependencies to other targets by being parameters to the depends function, in which case they are executed if an only if they have not been executed already in this run. (There is a page with some more information on Targets.)
You may be wondering about the stuff at the beginning of the script. Gant has two ways of using pre-built sub-scripts, either textual inclusion of another Gant script or the inclusion of a pre-compiled class. The example here shows the latter -- the class gant.targets.Clean is a class that provides simple clean capabilities.
The default name for the Gant script is build.gant, in the same way that the default for an Ant build script in build.xml.
Gant provides a way of finding what the documented targets are:
The messages on this output are exactly the strings associated with the target name in the introduction to the target.
Gant can build and install itself to an existing Groovy installation and is being used for various build tasks including building Groovy and Java programs, static websites, LaTeX documents. The ability to have arbitrary Groovy methods within the build scripts makes a Gant build script so much easier to work with that the mix of XML and Groovy scripts that using Ant necessitates. But then maybe this is an issue of individual perception. But then Gant is not about replacing Ant, it is about having a different way of working with the tasks and infrastructure that Ant provides.
Some pages providing more details:
Gant is currently at version 1.0.0, it requires Groovy version 1.0 or later. The following downloads are available:
Binary Groovy 1.5.0
Ealier distributions are available at http://dist.codehaus.org/gant/distributions as are snapshots of 1.0.1.
A Ubuntu/Debian package of Gant 0.3.3 for Groovy 1.1 (not sure which release candidate): http://dist.codehaus.org/gant/distributions/gant-188.8.131.52.deb
There is a file README_Install.txt in the distribution.
The jar and pom have been uploaded to the Codehaus Maven repository, the groupId is org.codehaus.gant and the artifactId is gant.
If you would prefer to work with the version in the Groovy Subversion repository, you can get a copy by:
This requires Groovy 1.0 or later to be used.
Obviously the first time you install Gant there is no Gant to build and install Gant. For people using the Subversion checkout there is an Ant build script to allow the bootstrapping.
If you give it a go and have some feedback, do let me know either on the Groovy User mailing list or by direct email to me email@example.com
If you have any issues with Gant then, for now, please add a JIRA issue into the Groovy JIRA with component Gant. Although this isn't entirely the truth, Gant is not a component of Groovy, it is the easiest way to track issues until Gant becomes big enough for its own JIRA entry. The URL is http://jira.codehaus.org/secure/CreateIssue!default.jspa