В чем разница между buildscript и allprojects в build.gradle?

135

В многопроектной сборке Gradle, может ли кто-нибудь сказать мне, в чем именно разница между разделом «allprojects» и разделом «buildscript»? У обоих есть repositoriesи dependenciesзадача. Подходит allprojectsдля моего проекта? О чем buildscript?

buildscript {  
     repositories {
         ...
     }
     dependencies {
         ...
     }
}

и

allprojects(subprojects) { 
     repositories {
         ...
     }
     dependencies {
         ...
     }
}
kidoher
источник

Ответы:

137

Раздел buildscriptконфигурации " " предназначен для самого gradle (т.е. изменения того, как gradle может выполнять сборку). Таким образом, этот раздел обычно включает плагин Android Gradle.

Раздел « allprojects» предназначен для модулей, создаваемых Gradle.

Часто секция репозитория одинакова для обоих, поскольку оба обычно получают свои зависимости от jcenter (или, возможно, maven central). Но раздел «зависимости» будет другим.

Обычно раздел «зависимости» для «всех проектов» пуст, так как зависимости для каждого модуля уникальны и будут находиться в файле «build.gradle» в каждом из модулей. Однако, если все модули имеют одинаковые зависимости, они могут быть перечислены здесь.

AndroidGuy
источник
Нужно ли указывать версию Gradle?
Игорь Ганапольский
user: 6998684 Версия gradle применяется ко всему проекту и объявляется в файле, который немного скрыт. Загляните в "./gradle/wrapper/gradle-wrapper.properties"
AndroidGuy
22

TL; DR: buildscriptпомогает найти плагины, allprojectsприменяется ко всем проектам


https://docs.gradle.org/current/userguide/userguide_single.html#applyPluginBuildscript говорит

Двоичные плагины, которые были опубликованы как внешние файлы jar, можно добавить в проект, добавив плагин в путь к классам скрипта сборки и затем применив плагин.

Итак, вам нужно, buildscriptчтобы gradle находил плагины, так как

Gradle по своей сути намеренно предоставляет очень мало для автоматизации реального мира. Все полезные функции, такие как возможность компилировать код Java, добавляются плагинами. Плагины добавляют новые задачи (например, JavaCompile), объекты домена (например, SourceSet), соглашения (например, исходный код Java находится в src / main / java), а также расширяют основные объекты и объекты из других плагинов.

Относительноallprojects :

Project API предоставляет свойство, allprojectsкоторое возвращает список с текущим проектом и всеми его подпроектами под ним. Если вы вызываете allprojectsс закрытием, операторы закрытия делегируются проектам, связанным с allprojects.

Serv-вкл
источник
Для меня, как для новичка в экосистеме Android, это ничего не значит. Куда нам нужно поместить наши зависимости? Можем ли мы удалить этот «скрипт сборки»?
Мартин Бергер,
@MartinBerger: поместите свои зависимости в модуль build.gradle, а не в build.gradleкаталог выше, с которым связан этот вопрос
serv-inc