Is it somehow possible to not execute the dependencies of a task when that task will be skipped?
In the example below, I'd like jar
(and the dependencies of jar
) to not be executed if a server is already running when executing runServerTests
. The server would in this case be started by another process.
apply plugin: 'java'
task startServerIfNotRunning(dependsOn: jar) {
onlyIf { isServerNotRunning() }
...
}
task runServerTests(dependsOn: startServerIfNotRunning) { ... }
I'd rather not add an onlyIf
to the jar
task, since other tasks that always should be executed may be depending on that one. The jar
task also has dependencies of its own.
To get the desired behavior, you have to exclude the task from the task execution graph, rather than skipping its execution. You can do this with -x
from the command line or programmatically with gradle.startParameter.excludedTaskNames << "..."
or gradle.taskGraph.useFilter { task -> ... }
.
You can do something like
task startServerIfNotRunning(dependsOn: jar) {
if (isServerNotRunning()) {
enabled = false;
dependsOn = [];
}
}
The if statement us evaluate in configuration phase and the dependent tasks are removed. I have summarized this in Skipping Gradle Tasks with code and output. Take a look.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With