Gradle builds a script file for handling two things; one is projects and other is tasks. Every Gradle build represents one or more projects.
A project represents a library JAR or a web application or it might represent a ZIP that is assembled from the JARs produced by other projects. In simple words, a project is made up of different tasks.
A task means a piece of work, which a build performs. A task might be compiling some classes, creating a JAR, generating Javadoc, or publishing some archives to a repository.
Gradle uses Groovy language for writing scripts.
Writing Build Script
Gradle provides a Domain Specific Language (DSL), for describing builds. This uses the Groovy language to make it easier to describe a build. Each build script of Gradle is encoded using UTF-8, saved offline and named as build.gradle.
build.gradle
We describe the tasks and projects by using a Groovy script. You can run a Gradle build using the Gradle command. This command looks for a file called build.gradle.
Take a look at the following example which represents a small script that prints tutorialspoint.
Copy and save the following script into a file named build.gradle. This build script defines a task name hello, which is used to print tutorialspoint string.
task hello { doLast { println 'tutorialspoint' } }
Execute the following command in the command prompt where the build.gradle file is stored.
C:\> gradle –q hello
Output
You will see the following output −
tutorialspoint
If you think task works similar to ANT’s target, then that is right. Gradle task is equivalent to ANT target.
You can simplify this hello task by specifying a shortcut (represents a symbol <<) to the doLast statement. If you add this shortcut to the above task helloit will look like the following script −
task hello << { println 'tutorialspoint' }
Now, You can execute the above script using gradle –q hello command.
The Grade script mainly uses two real Objects, one is Project Object and the other is Script Object.
- Project Object − Each script describes about one or multiple projects. While in the execution, this scripts configures the Project Object. You can execute some methods and use property in your build script, which are delegated to the Project Object.
- Script Object − Gradle takes script code into classes, which implements Script Interface and then, it is executed. This means that all the properties and methods declared by the script interface are available in your script.
The following table defines the list of standard project properties. All these properties are available in your build script.
Sr. No. | Name | Type | Default Value |
---|---|---|---|
1 | project | Project | The Project instance |
2 | name | String | The name of the project directory. |
3 | path | String | The absolute path of the project. |
4 | description | String | A description for the project. |
5 | projectDir | File | The directory containing the build script. |
6 | buildDir | File | projectDir/build |
7 | group | Object | Unspecified |
8 | version | Object | Unspecified |
9 | ant | AntBuilder | An AntBuilder instance |
Groovy Basics
Gradle build scripts use the full length Groovy API.
As a startup, take a look at the following examples.
Example 1
This example explains about converting a string to upper case.
Copy and save the code which is given below, into build.gradle file.
task upper << { String expString = 'TUTORIALS point' println "Original: " + expString println "Upper case: " + expString.toUpperCase() }
Execute the following command in the command prompt. It executes the above given script. You should execute this, where the build.gradle file is stored.
C:\> gradle –q upper
Output
Original: TUTORIALS point Upper case: TUTORIALS POINT
Example 2
The following example explains printing the value of an implicit parameter ($it) for 4 times
Copy and save the following code into build.gradle file.
task count << { 4.times { print "$it " } }
Execute the following command in the command prompt. It executes the script stated above. You should execute this, where the build.gradle file is stored.
$ gradle –q count
Output
This produces the following output −
0 1 2 3
Features of Groovy
Groovy language provides plenty of features. Some important features are discussed below −
Groovy JDK Methods
Groovy adds lot of useful methods to the standard Java classes. For example, Iterable API from JDK implements an each() method, which iterates over the elements of the Iterable Interface.
Copy and save the following code into build.gradle file.
task groovyJDK << { String myName = "Marc"; myName.each() { println "${it}" }; }
Execute the following command in the command prompt. It executes the above given script. You should execute this, where the build.gradle file stores.
C:\> gradle –q groovyJDK
Output
When you execute the above code, you should see the following output −
M a r c
Property Accessors
You can automatically access appropriate getter and setter methods of a particular property by specifying its reference.
The following snippet defines the syntaxes of getter and setter methods of a property buildDir.
// Using a getter method println project.buildDir println getProject().getBuildDir() // Using a setter method project.buildDir = 'target' getProject().setBuildDir('target')
Optional Parentheses on Method Calls
Groovy contains a special feature in methods calling, which is that the parentheses are optional for method calling. This feature applies to Gradle scripting as well.
Take a look at the following syntax. which defines a method calling systemProperty of test object.
test.systemProperty 'some.prop', 'value' test.systemProperty('some.prop', 'value')
Closure as the Last Parameter
Gradle DSL uses closures in many places, where the last parameter of a method is a closure. You can place the closure after the method call.
The following snippet defines that the syntaxes Closures use as repositories() method parameters.
repositories { println "in a closure" } repositories() { println "in a closure" } repositories({ println "in a closure" })
Default Imports
Gradle automatically adds a set of import statements to the Gradle scripts. The following list shows the default import packages to the Gradle script.
The default import packages to the Gradle script are listed below −
import org.gradle.* import org.gradle.api.* import org.gradle.api.artifacts.* import org.gradle.api.artifacts.cache.* import org.gradle.api.artifacts.component.* import org.gradle.api.artifacts.dsl.* import org.gradle.api.artifacts.ivy.* import org.gradle.api.artifacts.maven.* import org.gradle.api.artifacts.query.* import org.gradle.api.artifacts.repositories.* import org.gradle.api.artifacts.result.* import org.gradle.api.component.* import org.gradle.api.credentials.* import org.gradle.api.distribution.* import org.gradle.api.distribution.plugins.* import org.gradle.api.dsl.* import org.gradle.api.execution.* import org.gradle.api.file.* import org.gradle.api.initialization.* import org.gradle.api.initialization.dsl.* import org.gradle.api.invocation.* import org.gradle.api.java.archives.* import org.gradle.api.logging.* import org.gradle.api.plugins.* import org.gradle.api.plugins.announce.* import org.gradle.api.plugins.antlr.* import org.gradle.api.plugins.buildcomparison.gradle.* import org.gradle.api.plugins.jetty.* import org.gradle.api.plugins.osgi.* import org.gradle.api.plugins.quality.* import org.gradle.api.plugins.scala.* import org.gradle.api.plugins.sonar.* import org.gradle.api.plugins.sonar.model.* import org.gradle.api.publish.* import org.gradle.api.publish.ivy.* import org.gradle.api.publish.ivy.plugins.* import org.gradle.api.publish.ivy.tasks.* import org.gradle.api.publish.maven.* import org.gradle.api.publish.maven.plugins.* import org.gradle.api.publish.maven.tasks.* import org.gradle.api.publish.plugins.* import org.gradle.api.reporting.* import org.gradle.api.reporting.components.* import org.gradle.api.reporting.dependencies.* import org.gradle.api.reporting.model.* import org.gradle.api.reporting.plugins.* import org.gradle.api.resources.* import org.gradle.api.specs.* import org.gradle.api.tasks.* import org.gradle.api.tasks.ant.* import org.gradle.api.tasks.application.* import org.gradle.api.tasks.bundling.* import org.gradle.api.tasks.compile.* import org.gradle.api.tasks.diagnostics.* import org.gradle.api.tasks.incremental.* import org.gradle.api.tasks.javadoc.* import org.gradle.api.tasks.scala.* import org.gradle.api.tasks.testing.* import org.gradle.api.tasks.testing.junit.* import org.gradle.api.tasks.testing.testng.* import org.gradle.api.tasks.util.* import org.gradle.api.tasks.wrapper.* import org.gradle.authentication.* import org.gradle.authentication.http.* import org.gradle.buildinit.plugins.* import org.gradle.buildinit.tasks.* import org.gradle.external.javadoc.* import org.gradle.ide.cdt.* import org.gradle.ide.cdt.tasks.* import org.gradle.ide.visualstudio.* import org.gradle.ide.visualstudio.plugins.* import org.gradle.ide.visualstudio.tasks.* import org.gradle.ivy.* import org.gradle.jvm.* import org.gradle.jvm.application.scripts.* import org.gradle.jvm.application.tasks.* import org.gradle.jvm.platform.* import org.gradle.jvm.plugins.* import org.gradle.jvm.tasks.* import org.gradle.jvm.tasks.api.* import org.gradle.jvm.test.* import org.gradle.jvm.toolchain.* import org.gradle.language.assembler.* import org.gradle.language.assembler.plugins.* import org.gradle.language.assembler.tasks.* import org.gradle.language.base.* import org.gradle.language.base.artifact.* import org.gradle.language.base.plugins.* import org.gradle.language.base.sources.* import org.gradle.language.c.* import org.gradle.language.c.plugins.* import org.gradle.language.c.tasks.* import org.gradle.language.coffeescript.* import org.gradle.language.cpp.* import org.gradle.language.cpp.plugins.* import org.gradle.language.cpp.tasks.* import org.gradle.language.java.* import org.gradle.language.java.artifact.* import org.gradle.language.java.plugins.* import org.gradle.language.java.tasks.* import org.gradle.language.javascript.* import org.gradle.language.jvm.* import org.gradle.language.jvm.plugins.* import org.gradle.language.jvm.tasks.* import org.gradle.language.nativeplatform.* import org.gradle.language.nativeplatform.tasks.* import org.gradle.language.objectivec.* import org.gradle.language.objectivec.plugins.* import org.gradle.language.objectivec.tasks.* import org.gradle.language.objectivecpp.* import org.gradle.language.objectivecpp.plugins.* import org.gradle.language.objectivecpp.tasks.* import org.gradle.language.rc.* import org.gradle.language.rc.plugins.* import org.gradle.language.rc.tasks.* import org.gradle.language.routes.* import org.gradle.language.scala.* import org.gradle.language.scala.plugins.* import org.gradle.language.scala.tasks.* import org.gradle.language.scala.toolchain.* import org.gradle.language.twirl.* import org.gradle.maven.* import org.gradle.model.* import org.gradle.nativeplatform.* import org.gradle.nativeplatform.platform.* import org.gradle.nativeplatform.plugins.* import org.gradle.nativeplatform.tasks.* import org.gradle.nativeplatform.test.* import org.gradle.nativeplatform.test.cunit.* import org.gradle.nativeplatform.test.cunit.plugins.* import org.gradle.nativeplatform.test.cunit.tasks.* import org.gradle.nativeplatform.test.googletest.* import org.gradle.nativeplatform.test.googletest.plugins.* import org.gradle.nativeplatform.test.plugins.* import org.gradle.nativeplatform.test.tasks.* import org.gradle.nativeplatform.toolchain.* import org.gradle.nativeplatform.toolchain.plugins.* import org.gradle.platform.base.* import org.gradle.platform.base.binary import org.gradle.platform.base.component.* import org.gradle.platform.base.plugins.* import org.gradle.platform.base.test.* import org.gradle.play.* import org.gradle.play.distribution.* import org.gradle.play.platform.* import org.gradle.play.plugins.* import org.gradle.play.tasks.* import org.gradle.play.toolchain.* import org.gradle.plugin.use.* import org.gradle.plugins.ear.* import org.gradle.plugins.ear.descriptor.* import org.gradle.plugins.ide.api.* import org.gradle.plugins.ide.eclipse.* import org.gradle.plugins.ide.idea.* import org.gradle.plugins.javascript.base.* import org.gradle.plugins.javascript.coffeescript.* import org.gradle.plugins.javascript.envjs.* import org.gradle.plugins.javascript.envjs.browser.* import org.gradle.plugins.javascript.envjs.http.* import org.gradle.plugins.javascript.envjs.http.simple.* import org.gradle.plugins.javascript.jshint.* import org.gradle.plugins.javascript.rhino.* import org.gradle.plugins.javascript.rhino.worker.* import org.gradle.plugins.signing.* import org.gradle.plugins.signing.signatory.* import org.gradle.plugins.signing.signatory.pgp.* import org.gradle.plugins.signing.type.* import org.gradle.plugins.signing.type.pgp.* import org.gradle.process.* import org.gradle.sonar.runner.* import org.gradle.sonar.runner.plugins.* import org.gradle.sonar.runner.tasks.* import org.gradle.testing.jacoco.plugins.* import org.gradle.testing.jacoco.tasks.* import org.gradle.testkit.runner.* import org.gradle.util.*