Градирня и Многопроектная конструкция
Я пытаюсь понять, как я должен подойти следующие параметры проекта:
┌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
в текущей настройке у меня есть сборка.gradle в каждом из модулей, что я действительно ненавижу в этой настройке, так это то, что все содержимое сборки.gradle дублируется между модулями.
дело в том, что я хотел бы такую же логику в большинстве из них,' Чистые Модули Java ' все инфракрасные модули, которые я хотел бы Jar выход, JavaDoc, и источники и развертывание в каком-либо удаленном репозитории (* по умолчанию).
С другой стороны, некоторые модули ' Чистые Модули Java ' Я хотел бы иметь вторую повестку дня, например, помимо сборки по умолчанию* я хотел бы развернуть jar с зависимостями для конкретного проекта или что-то в этом роде.
при строительстве Фактический Проект Android, Я хотел бы, чтобы модули компилировались в сборке по умолчанию* и, наконец, чтобы настроить значение по умолчанию строить.gradle для всех моих Android проектов, которых довольно много, и я не хотел бы дублировать этот файл.
===============================================================
Я думаю, что я ищу что-то вроде Maven parent pom, но поскольку я не совсем понимаю, как работает Gradle, я открываю это для вас, ребята, чтобы поделиться своими мыслями...
принимая во внимание, что дублирование одного и того же файла сборки (я смею сказать) неприемлемо, из-за того, что я могу захотеть что-то изменить во всей логике сборки всех модулей
что было бы лучшим подходом для обработки такого рода установки?
2 ответа:
большинство из этого довольно нормально для http://www.gradle.org/docs/current/userguide/multi_project_builds.html Страница. Однако вам нужно будет добавить
evaluationDependsOn(':project1') evaluationDependsOn(':project2')
так что gradle будет оценивать project1 и project2 перед модулем. Во всех проектах, содержащих код, вам нужно будет иметь пустую сборку.файл gradle. Это также позволит вам настроить проект, если это необходимо.
пример: https://github.com/ethankhall/AndroidComplexBuild
добавить сборку.gradle в корне ваших проектов. Поэтому вам нужно 4, которые имеют полезную информацию в нем.
/build.gradle /settings.gradle /project1/build.gradle /project2/build.gradle /module/build.gradle
in / build.gradle put
dependencies { project(":module") }
in / settings.gradle put
include ':module' include ':project1', ':project1:A1', ':project1:B1', ':project1:Z1' include ':project2', ':project2:A2', ':project2:B2', ':project2:Z2'
in / 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 }
in / 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'
тогда ': project2 ' также является проектом, и он может иметь свою собственную сборку.gradle, в котором можно написать:
subprojects { project -> apply plugin 'android-library' // more configuration }
Если вы не применяете какой-либо плагин к самому ':project2', то этот проект просто ничего не выведет (что, вероятно, то, что вы хотите), но таким образом вы можете настроить все его подпроекты в простой идти.
тогда вы также можете иметь все ваши подмодули поставить некоторую логику, которая специфична для них
вы также можете технически сделать это в project2/build.gradle, если вы хотите сохранить все это в одном файле. Вы можете прочитать http://www.gradle.org/docs/current/userguide/multi_project_builds.html чтобы узнать, как настроить подпроекты из родительской сборки.файл gradle, доступ либо ко всем подпроектам, либо к конкретному, либо с использованием фильтрации.