Структура «Грейдл» и «Мультипроект»

Я пытаюсь понять, как мне подойти к следующей настройке проекта:

┌Top Android Project │ ├── Project 1 - (Pure Java Modules) │ │ │ ├── Module A1 │ ├── Module B1 │ : │ └── Module Z1 │ ├── Project 2 - (Android Libraries Modules) │ │ │ ├── Module A2 │ ├── Module B2 │ : │ └── Module Z2 │ └── Module - Actual Android Project 

В текущей установке у меня есть build.gradle в каждом из модhive, что я действительно ненавижу об этой настройке, так это то, что весь контент build.gradle дублируется между модулями.

Факт в том, что в большинстве из них мне нужна одна и та же логика: « Pure Java Modules» – это все модули infra, которые я хотел бы использовать для вывода JavaDoc и источников, а также для развертывания в каком-то удаленном репозитории (* по умолчанию).

С другой стороны, некоторые модули « Чистых Java-модhive », я бы хотел, например, иметь вторую повестку дня, помимо построения по умолчанию *, я хотел бы развернуть банку с зависимостями для конкретного проекта или что-то в этом роде ,

При создании Фактического проекта Android я хотел бы, чтобы модули компилировались в сборке по умолчанию * и, наконец, для настройки по умолчанию build.gradle для всех моих проектов Android, которых довольно много, и я не хотел бы дублировать это файл.

================================================== =============

Я предполагаю, что я ищу что-то вроде родительского помпы Maven, но поскольку я не совсем понимаю, как работает Gradle, я открываю это для вас, ребята, чтобы поделиться своими мыслями …

Принимая во внимание, что дублирование одного и того же файла сборки является (я полагаю, неприемлемым) из-за того, что я, возможно, захочу что-то изменить во всей логике сборки всех модhive

Какой был бы лучший подход для обработки такого рода настроек?

    Большинство из них довольно обычны для страницы http://www.gradle.org/docs/current/userguide/multi_project_builds.html . Однако вам нужно будет добавить

     evaluationDependsOn(':project1') evaluationDependsOn(':project2') 

    так что gradle будет оценивать project1 и project2 перед модулем. Во всех проектах, содержащих код, вам понадобится пустой файл build.gradle. Это также позволит вам настроить проект, если это необходимо.

    Пример: https://github.com/ethankhall/AndroidComplexBuild

    Добавьте build.gradle в корень ваших проектов. Поэтому вам нужно 4, которые содержат полезную информацию.

     /build.gradle /settings.gradle /project1/build.gradle /project2/build.gradle /module/build.gradle 

    в /build.gradle put

     dependencies { project(":module") } 

    в /settings.gradle put

     include ':module' include ':project1', ':project1:A1', ':project1:B1', ':project1:Z1' include ':project2', ':project2:A2', ':project2:B2', ':project2:Z2' 

    в /project1/build.gradle put

     apply plugin: 'java' subprojects { apply plugin: 'java' sourceCompatibility = JavaVersion.VERSION_1_6 targetCompatibility = JavaVersion.VERSION_1_6 repositories{ mavenCentral() } //Anything else you would need here that would be shared across all subprojects } 

    /project2/build.gradle

     buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.4.2' } } subprojects { apply plugin: 'android-library' android { compileSdkVersion 17 buildToolsVersion "17.0" } sourceCompatibility = JavaVersion.VERSION_1_6 targetCompatibility = JavaVersion.VERSION_1_6 repositories{ mavenCentral() } //Anything else you would need here that would be shared across all subprojects } 

    в /module/build.gradle put

     buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.4.2' } } evaluationDependsOn(':project1') evaluationDependsOn(':project2') apply plugin: 'android' android { compileSdkVersion 17 buildToolsVersion "17.0" } dependencies { compile project(":project1:A1") compile project(":project1:B1") compile project(":project1:Z1") compile project(":project2:A2") compile project(":project2:B2") compile project(":project2:Z2") } 

    Если у вас есть папки, соответствующие этой структуре, вы можете применить одну и ту же логику сборки к нескольким проектам.

    Если ваши настройки.gradle содержат

     include ':project2:moduleA2' 

    then ‘: project2’ также является проектом, и он может иметь свой собственный build.gradle, в котором вы можете написать:

     subprojects { project -> apply plugin 'android-library' // more configuration } 

    Если вы не применяете какой-либо плагин к самому «project2», то этот проект просто ничего не выведет (что, вероятно, вы хотите), но таким образом вы можете полностью настроить весь его подпроект.

    Тогда вы также можете использовать весь свой подмодуль для определения определенной для них логики

    Вы также можете технически сделать это в проекте2 / build.gradle, если хотите сохранить все в одном файле. Вы можете прочитать http://www.gradle.org/docs/current/userguide/multi_project_builds.html, чтобы узнать, как настраивать подпроекты из родительского файла build.gradle, получая доступ ко всем подпроектам или к конкретным, или используя фильтрацию.

    Давайте будем гением компьютера.