Gradle: вызов root-задачи с рекурсивным выполнением из подпроектов

Если у меня есть несколько проектов, как это

RootProject
+-- SubProjectA
+-- SubProjectB

и у каждого проекта есть задача 'foo', я могу вызвать ее в корневом проекте

RootProject>gradle foo

и это также выполняется для подпроектов

:foo
:SubProjectA:foo
:SubProjectB:foo

Но если я вызываю задачу ': foo' из подпроекта

RootProject\SubProjectA>gradle :foo

выполняется только задание в корневом проекте

:foo

но не задачи 'foo' в подпроектах.

Есть ли способ вызвать 'foo' во всех проектах, когда они находятся в подпроекте? Я спрашиваю об этом, потому что я использую плагин Gradle Eclipse, и там у меня есть доступ только к подпроектам, то есть проектам, которые я вижу в Eclipse.

Кстати: (довольно хакерское) решение, которое я до сих пор придумал

task fooAll(type:Exec) {
    workingDir '..'
    commandLine 'cmd', '/c', 'gradle foo'
}

1 ответ

Решение

Разрешение имен задач (например, foo) to tasks - это функция начального каталога, который по умолчанию является текущим каталогом. Вы можете изменить стартовый каталог с помощью -p опция командной строки (см. gradle --help). Так что вы должны сделать что-то вроде gradle foo -p ../,

Кроме того, импорт корневого проекта может стать лучшим способом решения проблемы Eclipse. Инструмент Eclipse очень хорошо справляется с иерархическим расположением каталогов.

PS: :foo это путь к задаче Это относится к задаче с именем foo в корневом проекте (:).

Другие вопросы по тегам