Gradle : What is a Gradle Task and how to write a custom task
What is a Gradle Task.
Lets first create a gradle file build.gradle
with the following contents in it.
group 'com.ekiras'
version '1.0-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
}
Now, lets run the the following command from terminal in the root directory
where build.gradle
is saved.
gradle tasks
It will give the list of all the tasks that are defined. It includes both gradle default tasks
and custom tasks
.
Now, you can run any defined task using the command.
gradle <task-name>
How to write a Custom Task in Gradle.
- A task in gradle is an imlpementation of
org.gradle.api.Task
interface. Task
interface has two methodsdoLast()
anddoFirst()
which can define the order of task execution.doFirst(Closure action)
- This adds the given closure to the beginning of this task's action list.doLast(Closure action)
- This adds the given Action to the end of this task's action list.
- Other useful methods are
getName()
- returns the name of the taskgetPath()
- returns the fully qualified path of the taskmustRunAfter(Object... paths)
- task should run after the given taskssetGroup(String group)
- Adds the task to a specified group.setDependsOn(Iterable<?> dependsOnTasks)
- set a list of tasks this task depends on.
You can see Full List of Methods in Task interface in the official documents.
Syntax for writing a task is as follows.
// Simple Task
task core(){
// do stuff
}
// Task which depends on some other task
task main(dependsOn : 'core'){
// do stuff
}
So we can write the tasks as follows.
task A {
doLast {
println 'Running task A'
}
}
task B(dependsOn: A) {
doLast {
println 'Running task B'
}
}
task C(dependsOn: [A, B]) {
doLast {
println 'Running task C'
}
}
task D(dependsOn: [A, C]) {
doLast {
println 'Running task D'
}
}
- We can run any task using command
gradle <task-name>
. - To run multipe tasks in one step you can use command
gradle <task-name> <task-name> <task-name>
. It will run the tasks in the defined list specified.
Note
gradle <task-name> <task-name> <task-name>
will only trigger tasks in this order, but task run list is still defined by tasks definitions that is if a tasks depends on any other task then taht task will be executed first. Also a task is run only once even if it is defines many times.gradle A A A
is equivalent togradle A
.
No comments: