Как иметь такие же зависимости в подпроектах, не повторяя себя? - PullRequest
0 голосов
/ 04 мая 2018

У меня есть проект Android, настроенный на gradle, состоящий из:

1.) Два подпроекта (модули Android Studio, которые создают слегка отличающиеся приложения) с собственными файлами build.gradle.

и

2.) Один «библиотечный проект» с общим общим кодом.

В настоящее время блок "зависимостей" файлов build.gradle для двух подпроектов содержит несколько одинаковых строк (что нарушает принцип "не повторяйся".):

dependencies {
    ....
    implementation rootProject.ext.timber
    implementation rootProject.ext.glide
    ....
}

Эти строки ссылаются на определения в файле "dependencies.gradle" в корневом каталоге настроек проекта.

ext {
    timber = 'com.jakewharton.timber:timber:4.7.0'
    glide = 'com.github.bumptech.glide:glide:4.6.1'
    ....
}

(Список строк "реализаций foo" намного длиннее, чем в этом примере.)

Теперь мой вопрос: Как лучше всего определить эти зависимости в одном месте? Или, каков наилучший подход, чтобы избежать необходимости повторять это повсеместно (например, если у меня более двух модулей, использующих одни и те же зависимости).

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

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

Либо с:

allprojects {
    // Shared config for ALL projects goes here
}

или с:

subprojects {
    // Shared config for ALL child projects
}

И поэтому в вашем случае вы бы получили:

subprojects {
    dependencies {
        ....
        implementation rootProject.ext.timber
        implementation rootProject.ext.glide
        ....
    }
}

В дополнение к этим методам вы можете использовать метод configure(), который принимает список проектов в качестве аргументов и настраивает только те из них. И вы можете использовать любую систему фильтрации, которая вам нравится, чтобы получить этот список проектов.

Для получения дополнительной информации см. Документацию по созданию многопроектных сборок .

0 голосов
/ 04 мая 2018

Я вроде понимаю, что вы спрашиваете, но ... какой смысл в «общем, общем коде», если вы не делитесь, например, Glide? :) По правде говоря, если вы используете Gradle 3. +, вы должны изменить implementation на api

Итак, в вашей общей библиотеке / коде:

dependencies {
    ....
    api rootProject.ext.timber
    api rootProject.ext.glide
    ....
}

Если вы хотите узнать больше об этом, проверьте официальные документы для миграции Gradle (где они представили все эти новые вещи).

Вы узнаете, что:

  1. implementation 'example.dependency:1.0.0’ -> используется только в этом модуле.
  2. api 'example.dependency:1.0.0’ -> также доступно в любых сборках, которые зависят от модуля.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...