В многомодульном проекте есть один главный модуль и множество подмодулей. Он имеет такую раскладку:
(root)
+- settings.gradle
+- build.gradle # optional (commonly present)
+- gradle.properties # optional
+-- buildSrc/ # optional
| +- build.gradle
| +-- src/...
+-- my-gradle-stuff/ # optional
| +- utils.gradle # optional
+-- sub-a/
| +- build.gradle
| +- src/
+-- sub-b/
+- build.gradle
+- src/
подмодули также могут располагаться глубже во вложенных папках, но без изменения кода в settings.gradle их имя будет включать имя таких папок.
settings.gradle
Основная роль settings.gradle состоит в том, чтобы определить все включенные подмодули и пометить корень каталога дерева модулей, чтобы вы могли иметь только один settings.gradleфайл в многомодульном проекте.
rootProject.name = 'project-x'
include 'sub-a', 'sub-b'
Файл настроек также написан на Groovy, и поиск подмодулей можно настроить.
build.gradle
На каждый модуль приходится один такой файл, он содержит логику сборки для этого модуля.
В build.gradleфайле основного модуля вы можете использовать allprojects {}или subprojects {}для определения настроек для всех остальных модулей.
В build.gradleфайле подмодулей вы можете использовать, compile project(':sub-a')чтобы один подмодуль зависел от другого.
gradle.properties
Это необязательно, его основная цель - предоставить параметры запуска для использования самого Gradle, например
org.gradle.jvmargs=-Xmx=... -Dfile.encoding=UTF-8 ...
org.gradle.configureondemand=true
Эти значения могут быть переопределены файлом USER_HOME/.gradle/gradle.propertiesи переопределены аргументами командной строки gradle. Также можно установить переменные среды для сборки в этом файле, используя systemProp.префикс as.
Любое свойство в этом файле можно использовать в любом build.gradle, поэтому некоторые проекты также помещают информацию о версии или выпуске зависимостей gradle.properties, но это, вероятно, является злоупотреблением этим файлом.
мой-градиент-материал / utils.gradle
(Возможно любое имя папки или файла.) Вы можете определить дополнительные пользовательские файлы Gradle для повторного использования определений и включить их в другие файлы Gradle с помощью
apply from: "$rootDir/gradle/utils.gradle"
другие места для размещения этого могут быть src/gradleилиsrc/build/gradle
buildSrc / ...
Эта папка особенная, она как отдельный проект gradle. Он создается до того, как делать что-либо еще, и может предоставлять функцию для использования в любом другом файле gradle. По техническим причинам поддержка IDE ссылок на эту папку работает намного лучше, чем любой другой способ извлечения общего кода из нескольких build.gradleфайлов в отдельное место.
Вы можете определить сложную настраиваемую логику сборки в java, groovy или kotlin вместо написания и развертывания плагина. Это также полезно для модульного тестирования вашего пользовательского кода сборки, так как вы можете иметь модульные тесты. Структура исходных папок buildSrcможет быть адаптирована как для любого проекта java / groovy / kotlin.