First of all: operator <<
(leftShift) is equivalent of doLast {closure}
. From gradle 3.2 it is deprecated. All the task code are writing in a build.gradle.
A task represents some atomic piece of work which a build performs. This might be compiling some classes, creating a JAR, generating Javadoc, or publishing some archives to a repository.
Gradle supports two big types of tasks: simple and enhanced.
Let's observe some task definition styles:
task hello {
doLast{
//some code
}
}
Or the:
task(hello) {
doLast{
//some code
}
}
This tasks above are equivalents. Also, you can provide some extensions to the task, such as: dependsOn
,mustRunAfter
, type
etc.
You can extend task by adding actions after task definition, like this:
task hello {
doLast{
println 'Inside task'
}
}
hello.doLast {
println 'added code'
}
When we'll execute this we got:
> gradle -q hello
Inside task
added code
Let's talk about two big types of task.
Tasks which we define with an action closure:
task hello {
doLast{
println "Hello from a simple task"
}
}
Enhanced it is a task with a preconfigured behavior. All plugins that you using in your project are the extended, or the enhanced tasks. Let's create ours and you will understand how it works:
task hello(type: HelloTask)
class HelloTask extends DefaultTask {
@TaskAction
def greet() {
println 'hello from our custom task'
}
}
Also, we can pass parameters to our task, like this:
class HelloTask extends DefaultTask {
String greeting = "This is default greeting"
@TaskAction
def greet() {
println greeting
}
}
And from now on we can rewrite our task like so:
//this is our old task definition style
task oldHello(type: HelloTask)
//this is our new task definition style
task newHello(type: HelloTask) {
greeting = 'This is not default greeting!'
}
When we'll execute this we got:
> gradle -q oldHello
This is default greeting
> gradle -q newHello
This is not default greeting!
All questions about development gradle plugins onto official site