Я думаю, что вы в значительной степени ответили на него сами, если только я что-то не упустил:)
Вы группируете их в совокупные задачи, и это позволяет вам делать то, что вы хотите.К этим задачам не нужно прикреплять какие-либо действия.
Например, если у вас есть куча задач, таких как foo
, bar
и baz
, вы можете сгруппировать их следующим образом:
// Individual tasks
task foo { doLast { logger.quiet("foo!")} }
task bar { doLast { logger.quiet("bar!")} }
task baz { doLast { logger.quiet("baz!")} }
// Aggregate tasks (groups)
task A(dependsOn: ["foo", "bar"])
task B(dependsOn: ["foo", "baz"])
task C(dependsOn: ["baz"])
Запуск A
выполняет foo
и bar
:
$ gradle A
> Task :bar
bar!
> Task :foo
foo!
BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 executed
Запуск обоих A
и B
выполняет их все:
$ gradle A B
> Task :bar
bar!
> Task :foo
foo!
> Task :baz
baz!
BUILD SUCCESSFUL in 1s
3 actionable tasks: 3 executed
Обновление: Извините, не понял, что вы говорите о фактическом свойстве group
для задач.
Я почти уверен, что вам все равно придется создавать задачусамостоятельно для каждой группы, но вы можете упростить определение зависимостей примерно так:
A.dependsOn(tasks.matching { it.group = "A" })
Если у вас много групп, вы можете дополнительно автоматизировать создание групповых задач, подобных этой:
tasks.findAll{}.each { task ->
tasks.maybeCreate(task.group).dependsOn(task)
}