В чем разница между всеми проектами и подпроектами
В многопроектной сборке gradle, может ли кто-нибудь сказать мне, что именно представляет собой различие между секцией "allprojects" и "подпроектами"? Только родительский каталог? Кто-нибудь использует оба? Если да, у вас есть общие правила, которые определяют, что обычно ставится в каждом из них?
Связанный вопрос: какая разница между двумя синтаксисами (действительно для всех проектов AND подпроектов):
subprojects { ...
}
и
configure(subprojects) { ...
}
Когда вы один за другим?
Ответы
Ответ 1
В многопроектной сборке gradle у вас есть rootProject и подпроекты. Комбинация обоих - все проекты. RootProject - это начало сборки. Обычный шаблон - rootProject не имеет кода, а подпроекты - это java-проекты. В этом случае вы применяете java-плагин только к подпроектам:
subprojects {
apply plugin: 'java'
}
Это будет эквивалентно проекту maven aggregate pom, который только строит подмодули.
Что касается двух синтаксисов, они делают то же самое. Первый выглядит просто лучше.
Ответ 2
Добавляя к ответу Райана, метод configure
становится важным, когда вы хотите настроить настраиваемые подмножества объектов. Например configure([project(":foo"), project(":bar")]) { ... }
или configure(tasks.matching { it.name.contains("foo") }) { ... }
.
Когда использовать allprojects
vs. subprojects
зависит от обстоятельств. Часто вы будете использовать оба. Например, связанные с кодом плагины, такие как плагин Java, обычно применяются к subprojects
, потому что во многих сборках корневой проект не содержит никакого кода. С другой стороны, плагины Eclipse и IDEA обычно применяются к allprojects
. Если есть сомнения, посмотрите примеры и другие сборки и/или эксперименты. Общая цель - избежать ненужной конфигурации. В этом смысле subprojects
лучше, чем allprojects
, пока он дает ожидаемые результаты.