2016-02-23 2 views
2

Возможно ли связать (включить) другой проект корня градиента и его подпроекты из моего основного проекта?Мультипроект градиента, многократные корневые проекты и зависимости

Пример: настоящее время у меня 2 Gradle андроид мультипроектов, как это:

rootA 
     |--- android_lib_A1 
     |--- android_lib_A2 
     |--- androidapp_A 

    rootB 
     |--- android_lib_B1 
     |--- android_lib_B2 
     |--- androidapp_B 

Как правильно включать Gradle проект android_lib_B1 в rootA, чтобы использовать его в androidapp_A?

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

  • rootB Gradle сборки не читать, когда он включен в rootA, более специально allprojects{}, subprojects{} директивы
  • rootB Gradle настройки не прочитать которая не строить когда android_lib_B1 зависит, например, от android_lib_B2, но это, по-видимому, нормальное поведение в соответствии с тем, что я прочитал.

я могу заставить его работать, публикуя android_lib_B1 в мой локальный репозиторий Maven, но я хотел бы быть в состоянии собрать все вместе, без дополнительной задачи публикации.

Я видел, что у градле ProjectDescriptor есть атрибуты parent и children, это путь?

ответ

2

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

1) В вашем проекте rootA/settings.gradle

include ':android_lib_A1',':android_lib_A2',':androidapp_A' ':android_lib_B1' 
project(':android_lib_B1').projectDir = new File("/path-to-project/rootB/android_lib_B1") 

2) Добавить зависимость в build.gradle от androidapp_A модуля

dependencies { 
    compile project(':android_lib_B1') 
} 

Обратите внимание.
Таким образом, вы сможете прочитать build.gradle в android_lib_B1, но не в скрипте rootB. Это означает, что если у вас есть некоторые задачи или функции, определенные в корневом каталоге, вы должны добавить в корневой каталог или в файл android_lib_B1/build.gradle.
Конечно, rootB/settings.gradle не будет читаться, так как вы используете проект rootA.

Частичное решение может заключаться в использовании общей папки , где вы можете поместить свои файлы градиента. Вы можете связать эти файлы с помощью:

apply from: 'gradleFolderScript/myFile.gradle' 
+0

Спасибо за ваш ответ. Я уже пробовал это, и, как вы говорите, мои задачи 'rootB' не читаются. Я пришел из Maven и использовал 'rootB' для факторизации общих задач среди моих библиотек, таких как parent' pom.xml'. Неужели нет другого способа, чем подтолкнуть conf к каждой библиотеке? Или скопировать/вставить 'rootB' в' rootA'? – IppX

+0

@IppX Я этого не знаю.Обычно я использую отдельный файл gradle (а не верхний уровень), связывающий его с 'apply from: 'gradleFolderScript/myFile.gradle''. Таким образом, вы можете использовать общую папку для повторного использования одних и тех же файлов градиента. –

+0

Я попробую это, это хороший компромисс. Благодаря ! – IppX

0

Другим вариантом является сохранение проектов отдельно и публиковать артефакты общего хранилища (например artifactory). См. publishing artifacts

+0

Спасибо за ваш ответ! Это действительно работает, но, как я сказал, я хотел бы избежать этой дополнительной публикации, если это возможно. – IppX

+0

Ах, тогда предложение GabrieleMariotti о мультимодульной сборке плюс 'project (...)' зависимостей - это решение –

Смежные вопросы