Skip to end of metadata
Go to start of metadata



Executes a series of Groovy statements. Statements can either be read in from a text file using the src attribute or from between the enclosing Groovy tags.

Required taskdef

Assuming groovy-all-VERSION.jar is in my.classpath you will need to declare this task at some point in the build.xml prior to using this task.

<groovy> attributes





File containing Groovy statements.
The directory containing the file is added to the classpath

Yes, unless statements enclosed within tags


the classpath to use



the classpath to use, given as reference to a PATH defined elsewhere


Parameters specified as nested elements


Groovy's classpath attribute is a PATH like structure and can also be set via a nested classpath element.

<arg> (since 1.1)

Arguments can be set via one or more nested <arg> elements using the standard Ant command line conventions.

Available bindings

A number of bindings are in scope for use within your Groovy statements.




an instance of AntBuilder that knows about the current ant project


the current ant project


a Map of ant properties


the owning target that invoked this groovy script


the wrapping task, can access anything needed in


command line arguments, if any


Hello world, version 1:

Hello world, version 2:

List all xml files in the current directory:

List all xml files within a jar:

To run a script:

To find all the 'Builder' classes having an 'org.*' package within a directory of jars:

Which might result in something like:

FileScanner version of above (with a slight variation on collecting the names):

Here is an example of calling out to a web service from your Ant script:

which will output the following (along with some informational messages):

     [echo] I'm freezing at 0 degrees Celsius
     [echo] I'm freezing at 32 degrees Fahrenheit


Setting arguments

Forking Groovy

Since 1.5.7 and 1.6-beta-2, <groovy> also supports a fork="true" attribute. In fact, many of the attributes from the <java> Ant task are supported. More details to come ...

More examples

  • No labels


  1. FYI, at the time the groovy script is executed, any classes that it references must be findable in individual groovy files or class files along the classpath.  If they cannot be located you may wind up with a java.lang.StackOverflowError exception. 

    I had a couple of classes in a single groovy file.  When ant executed my <groovy> block which invoked one of the classes from the groovy file it failed.

    However, one-class-one-file is but one way to solve this problem.  It is also possible to solve this by using *<groovyc>*to build the groovy files (which creates one class file for each class) and then point the class path at groovyc output folder (or you can jar them up).

  2. Is there a way to specify the Java path to use in the groovy task, without needing to rely on Java being in the PATH or having JAVA_HOME set?

    I have an Ant script that needs to call another ant script, in which there is a groovy task defined.  I never want my build to be dependent on something defined in the Environment.  I want full control in my script.  I was hoping that  I could use something like the executable attribute that can be used for the javac Ant task.