I'm likely overlooking something pretty core/obvious, but how can I create a task that will always be executed for every task/target?
I can do something like:
task someTask << {
println "I sometimes run"
}
println "I always run"
But it would be much more desirable to have the always running part in a task.
The closest I've come is:
task someTask << {
println "I sometimes run"
}
println "I always run"
void helloThing() {
println "I always run too. Hello?"
}
helloThing()
So, using a method is an 'ok' solution, but I was hoping there'd be a way to specifically designate/re-use a task.
Hopefully somebody has a way to do this. :)
Assuming the goal is to print system information, you could either just always print the information in the configuration phase (outside a task declaration), and have a dummy task
systemStatus
that does nothing (because the information is printed anyway). Or you could implement it as a regular task, and make sure the task always gets run by adding":systemStatus"
as the first item ofgradle.startParameter.taskNames
(a list of strings), which simulates someone always typinggradle :systemStatus ...
. Or you could leverage a hook such asgradle.projectsLoaded { ... }
to print the information there.This attaches a closure to every task in every project in the given build:
If you need the function/closure to be called only once per build, before all tasks of all projects, use this:
If you need the function/closure to be called only once per build, after all tasks of all projects, use this:
What's wrong with invoking it straight from the root
build.gradle
?