Introduction to Gradle lifecycle and Tasks

Gradle lifecycle

Gradle lifecycle consist of three phases: initialization, configuration, and execution:

  1. During Initialization, Gradle decides which projects are to participate in the build.

  2. During Configuration, task objects are assembled into an internal object model, usually called the DAG (for directed acyclic graph).

  3. During Execution, build tasks are executed in the order required by their dependency relationships.

 

Closure in Gradle

A block of code between two curly braces is referred to as closure, and a closure is like an object that can be passed as a parameter to a method or assigned to a variable to execute later.

task helloWorld << {

println 'Hello World'

}

 

Tasks in Gradle

Though gradle tasks may look like tasks in other languages, gradle tasks are actually objects and you can even program using them if you want. A gradle task consists of a name, and optionally action and configuration block.

We will see actions and configuration blocks next.

 

Execution phase

Action is a closure appended to a task using << operator.

We need to declare a task and append an action.

We can declare a task as:

task helloWorld

and then assign the action later as:

helloWorld << {

  println 'Hello World'

}

 

We can also declare name and append action together as:

task helloWorld << {

  println 'Hello World'

}

 

Gradle action closures append to the list of actions. Here << is an append operator, not a replacement operator. So above task and definition can be decomposed as:

task helloWorld

helloWorld << {

  print 'Hello'

}

helloWorld << {

  println ' World!'

}

When you execute ‘gradle –q helloWorld’, all the above build files will print:

Hello World

This is possible because tasks in gradle are programmable objects.

Task actions are executed during the execution phase of Gradle lifecycle.

 

Configuration phase

A configuration block is executed in the configuration phase, which is before the execution phase. It can be used to setup variables or data structures needed by a task action.

A configuration block is defined by a closure without the << operator.

Configuration blocks are also appended to other configuration blocks, similar to actions.

Example:

task helloWorld

helloWorld << {

  println 'Hello World'

}

helloWorld {

  println 'Config block 1'

}

helloWorld {

  println 'Config block 2'

}

When you execute ‘gradle –q helloWorld’, this will print:

Config block 1

Config block 2

Hello World

Note that config blocks are appended and executed before the actions.

 

All build configuration code will run every time you run a Gradle build file, regardless of task that is executed. 

Example:

task helloWorld

task anotherTask

helloWorld << {

  println 'Hello World'

}

helloWorld {

  println 'Config block 1'

}

anotherTask {

  println 'Config block 2'

}

If you execute this as ‘gradle –q anotherTask’ you will get the output as:

Config block 1

Config block 2

If you execute this as ‘gradle –q helloWorld’ you will get the output as:

Config block 1

Config block 2

Hello World

 

References

http://www.gradle.org

http://www.gradle.org/docs/current/userguide/writing_build_scripts.html

Book: Building and Testing with Gradle by Tim Berglund and Matthew McCullough.

 

Software Versions Tested Against

Examples in this note has been tested against Gradle versions 1.11 and 2.1.

Tags: 

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)