# Gradle Build Language Reference

### Version 0.9.1

## Introduction

This reference guide describes the various types which make up the Gradle build language, or DSL.

## Some basics

There are a few basic concepts that you should understand, which will help you write Gradle scripts.

First, Gradle scripts are configuration scripts. As the script executes, it configures an object of a particular type. For example, as a build script executes, it configures an object of type `Project`. This object is called the delegate object of the script. The following table shows the delegate for each type of Gradle script.

Type of script | Delegates to instance of
Build script | `Project`
Init script | `Gradle`
Settings script | `Settings`

The properties and methods of the delegate object are available for you to use in the script.

Second, each Gradle script implements the `Script` interface. This interface defines a number of properties and methods which you can use in the script.

## Build script structure

A build script is made up of zero or more statements and script blocks. Statements can include method calls, property assignments, and local variable definitions. A script block is a method call which takes a closure as a parameter. The closure is treated as a configuration closure which configures some delegate object as it executes. The top level script blocks are listed below.

Block | Description
`allprojects { }` | Configures this project and each of its sub-projects.
`artifacts { }` | Configures the published artifacts for this project.
`buildscript { }` | Configures the build script classpath for this project.
`configurations { }` | Configures the dependency configurations for this project.
`dependencies { }` | Configures the dependencies for this project.
`repositories { }` | Configures the repositories for this project.
`sourceSets { }` | Configures the source sets of this project.
`subprojects { }` | Configures the sub-projects of this project.

A build script is also a Groovy script, and so can contain those elements allowed in a Groovy script, such as method definitions and class definitions.

## Core types

Listed below are some of the central types which are used in Gradle scripts:

Type | Description
`Project` | This interface is the main API you use to interact with Gradle from your build file. From a `Project`, you have programmatic access to all of Gradle's features.
`Task` | A `Task` represents a single atomic piece of work for a build, such as compiling classes or generating javadoc.
`Gradle` | Represents an invocation of Gradle.
`Settings` | Declares the configuration required to instantiate and configure the hierarchy of `Project` instances which are to participate in a build.
`Script` | This interface is implemented by all Gradle scripts to add in some Gradle-specific methods. As your compiled script class will implement this interface, you can use the methods and properties declared by this interface directly in your script.
`SourceSet` | A `SourceSet` represents a logical group of Java source and resources.
`Configuration` | A `Configuration` represents a group of artifacts and their dependencies.

## Task types

Listed below are the various task types which are available for use in your build script:

Type | Description
`AntlrTask` | Generates parsers from Antlr grammars.
`Checkstyle` | Runs Checkstyle against some source files.
`CodeNarc` | Runs CodeNarc against some source files.
`Compile` | Compiles Java source files.
`Copy` | Copies files into a destination directory. This task can also rename and filter files as it copies. The task implements `CopySpec` for specifying what to copy.
`Delete` | Deletes files or directories.
`Directory` | Creates a directory.
`DependencyReportTask` | Displays the dependency tree for a project. Can be configured to output to a file, and to optionally output a graphviz compatible "dot" graph. An instance of this type is used when you execute the `dependencies` task from the command-line.
`EclipseClasspath` | Generates an Eclipse `.classpath` file.
`EclipseJdt` | Generates the Eclipse JDT configuration file.
`EclipseProject` | Generates an Eclipse `.project` file.
`EclipseWtp` | Generates Eclipse configuration files for Eclipse WTP.
`Exec` | Executes a command line process.
`GradleBuild` | Executes a Gradle build.
`GroovyCompile` | Compiles Groovy source files, and optionally, Java source files.
`Groovydoc` | Generates HTML API documentation for Groovy source, and optionally, Java source.
`IdeaModule` | Generates an IDEA module file.
`IdeaProject` | Generates an IDEA project file.
`IdeaWorkspace` | Generates an IDEA workspace file.
`Jar` | Assembles a JAR archive.
`Javadoc` | Generates HTML API documentation for Java classes.
`JavaExec` | Executes a Java application in a child process.
`JettyRun` | Deploys an exploded web application to an embedded Jetty web container. Does not require that the web application be assembled into a war, saving time during the development cycle.
`JettyRunWar` | Deploys a WAR to an embedded Jetty web container.
`JettyStop` | Stops the embedded Jetty web container, if it is running.
`PropertyReportTask` | Displays the properties of a project. An instance of this type is used when you execute the `properties` task from the command-line.
`ProjectReportTask` | Displays a list of projects in the build. An instance of this type is used when you execute the `projects` task from the command-line.
`ScalaCompile` | Compiles Scala source files, and optionally, Java source files.
`ScalaDoc` | Generates HTML API documentation for Scala source files.
`Sync` | Synchronises the contents of a destination directory with some source directories and files.
`Tar` | Assembles a TAR archive.
`TaskReportTask` | Displays a list of tasks in the project. An instance of this type is used when you execute the `tasks` task from the command-line.
`Test` | Executes tests. Supports JUnit (3.8.x or 4.x) or TestNG tests.
`Upload` | Uploads the artifacts of a `Configuration` to a set of repositories.
`War` | Assembles a WAR archive.
`Wrapper` | Generates scripts (for *nix and windows) which allow you to build your project with Gradle, without having to install Gradle.
`Zip` | Assembles a ZIP archive.