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

Может ли кто-нибудь сказать мне, на какой многопроектной сборке Gradle, в чем разница между разделом "allprojects" и разделом "buildscript"? У обоих есть repositories а также dependencies задача. Является allprojects для моего проекта? Как насчет buildscript?

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

а также

allprojects(subprojects) { 
     repositories {
         ...
     }
     dependencies {
         ...
     }
}

2 ответа

Решение

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

"allprojectsРаздел предназначен для модулей, которые создаются Gradle.

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

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

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


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

Бинарные плагины, опубликованные в виде внешних jar-файлов, можно добавить в проект, добавив плагин в путь к сценарию сборки, а затем применив плагин.

Так вам нужно buildscript для Gradle, чтобы найти плагины, а

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

Что касаетсяallprojects:

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

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