Как вызвать задачу Gradle во всех подпроектах? - PullRequest
0 голосов
/ 10 апреля 2020

Скажем, у меня есть иерархия проектов Gradle, и к некоторым из них применен плагин java:

root
  projA
    projA1
    projA2 (java)
  projB
    projB1 (java)
    projB2 
      projB21 (java)
      projB22 (java) 
  projC (java)

Я хочу выполнить задачу test во всех подпроектах, где эта задача существует: :projA:projA2:test, :projB:projB1:test и :projC:test. Возможно, я добавлю больше проектов в будущем, и я не хочу вручную поддерживать список всех тестовых задач во всех подпроектах. Как мне этого добиться?

Одна вещь, которая пришла мне в голову, выглядит примерно так:

// In root I iterate over all subprojects and find the task by name causing
// its creation and configuration

tasks.register("testAll") {
  dependsOn subprojects.findResults { it.tasks.findByName("test") }
}

Мне не нравится этот подход, поскольку он идет вразрез с настройкой задачи Стиль избегания .

Другой вариант - перебрать подпроекты и проверить, применяется ли там плагин java:

// In root

tasks.register("testAll") {
  dependsOn subprojects.findAll { it.plugins.hasPlugin("java") }.collect { it.tasks.named("test") }
}

Это работает, но у меня есть начинка, которую я пропускаю что-то более простое ...

EDIT 1 : Извините за это, но я забыл одну важную деталь - мне нужно запустить тесты в поддереве проектов. Скажем, все по пути :projB.

1 Ответ

2 голосов
/ 10 апреля 2020

Если я что-то упустил, вы хотите запустить тесты для всех ваших подмодулей.

Вы можете просто ... сделать это.

./gradlew clean test

Это запустит тестовое задание во всех подпроектах, которые достаточно сконфигурированы.

Если вам нужно запустить задачи в указанном подпроекте c, из проекта root вы можете указать подпроект, для которого вы хотите запустить задачу.

./gradlew clean :projB:test

Если у ваших подпроектов есть задача, которую нужно запустить после теста, то вы можете сделайте это в вашем subprojects блоке.

subprojects {
    myTask.dependsOn("test")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...