Яка різниця між buildscript і всіпроектами в build.gradle?


135

Чи може хтось розповісти мені про збірку gradle з багатопроектним проектом, у чому саме різниця між розділом "allprojects" та "buildscript"? У обох є repositoriesі dependenciesзавдання. Це allprojectsдля мого проекту? Про що buildscript?

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

і

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

Відповіді:


137

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

Розділ " allprojects" призначений для модулів, які будує Gradle.

Часто розділ сховища однаковий для обох, оскільки обидва отримають свої залежності від jcenter, як правило (або, можливо, центрального). Але розділ "залежності" буде іншим.

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


Чи потрібно вказати версію gradle?
ІгорГанапольський

користувач: 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 :

API API надає властивість, allprojectsяка повертає список з поточним проектом та всі його підпроекти під ним. Якщо ви телефонуєте allprojectsіз закриттям, заяви про закриття передаються проектам, пов'язаним із allprojects.


Для мене, як для початківця в екосистемі Android, це нічого не означає. Куди нам потрібно поставити свої залежності? Чи можемо ми видалити цей "buildscript"?
Мартін Бергер

@MartinBerger: поставте свої залежності в модуль build.gradle, а не на build.gradleте, що є однією з вищевказаних директорій, з якою йдеться в цьому питанні
serv-inc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.