Яка різниця між усіма проектами та субпроектами


124

Під час складання багатопроектної студії, хтось може мені сказати, у чому саме різниця між розділом "всіпроекти" та "підпроектами"? Просто батьківський каталог? Хтось використовує обидва? Якщо так, чи є у вас загальні правила, які визначають, що зазвичай вводиться в кожне?

Пов'язане запитання: чим відрізняється два синтаксису (насправді для всіхпроектів І підпроектів):

subprojects {  ...
}

і

configure(subprojects) { ...
}

Коли б ти один над іншим?

Відповіді:


119

У багатопроектній збірці gradle у вас є rootProject і підпроекти. Поєднання обох - це всі проекти. RootProject - звідки починається збірка. Поширений шаблон - rootProject не має коду, а підпроекти - проекти java. У такому випадку ви застосовуєте плагін java лише до підпроектів:

subprojects {
    apply plugin: 'java'
} 

Це було б рівнозначно великому пом-проекту, який просто будує підмодулі.

Щодо двох синтаксисів, вони роблять точно те саме. Перший просто виглядає краще.


Я намагаюся зрозуміти вашу відповідь, і чому б хотілося, щоб у "rootProject немає коду"?
Marian Paździoch

6
Він може мати код, але більшість часу це лише для об'єднання всіх підпроектів у рамках одного кореневого проекту.
mallaudin

44

Додаючи відповідь Райана, configureметод стає важливим, коли потрібно налаштувати власні підмножини об’єктів. Наприклад configure([project(":foo"), project(":bar")]) { ... }або configure(tasks.matching { it.name.contains("foo") }) { ... }.

Коли використовувати allprojectsпроти subprojectsзалежно від обставин. Часто ви використовуєте і те, і інше. Наприклад, зазвичай застосовуються плагіни, пов'язані з кодом, такі як плагін Java subprojects, оскільки в багатьох побудовах кореневий проект не містить жодного коду. З іншого боку, плагіни Eclipse та IDEA зазвичай застосовуються до allprojects. Якщо ви сумніваєтесь, подивіться приклади та інші побудови та / або експерименти. Загальна мета - уникнути невідповідної конфігурації. У цьому сенсі subprojectsце краще, ніж allprojectsце дає очікувані результати.


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