Skipping dependency execution of a disabled task i

2019-04-28 16:29发布

问题:

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.

回答1:

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 -> ... }.



回答2:

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.