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

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

┌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

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

    2 Solutions collect form web for “Структура «Грейдл» и «Мультипроект»”

    Большинство из них довольно обычны для страницы 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, получая доступ ко всем подпроектам или к конкретным, или используя фильтрацию.

    Interesting Posts

    Почему размер кеша L1 меньше, чем размер кэша L2 на большинстве процессоров?

    Как отключить сетевой кабель, который застрял?

    Программное обеспечение для переименования файлов с японскими или корейскими именами символов / букв на их латинизированные (римские / латинские буквы) эквиваленты

    Как избежать вызовов os.system ()?

    Просмотр PDF в формах Windows с использованием C #

    objective: перед и: после псевдо-элементов с jQuery

    Получение элемента списка по индексу

    Ошибка сегментации при изменении строки с помощью указателей?

    Вскрытие всплывающих окон доступа к устройствам USB?

    Является ли jQuery каким-либо кэшированием «селекторов»?

    Существует ли доступная лицензия / лицензионный платеж DRM для защиты и распространения контента?

    Как отключить функцию «Обнаружение установщика» в UAC в Windows 7 Home Premium?

    Как изменить значок, связанный с определенным файловым форматом (и только тем файлом) в Windows 10?

    Как отключить WebRTC в Google Chrome

    Что такое перечисление typedef в Objective-C?

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