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
в корневом проекте (:
).