Skipping dependency execution of a disabled task i

2019-04-28 16:20发布

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.

2条回答
相关推荐>>
2楼-- · 2019-04-28 17:02

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.

查看更多
姐就是有狂的资本
3楼-- · 2019-04-28 17:08

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

查看更多
登录 后发表回答