Есть ли способ разделить / выделить общие части сборки Gradle? - PullRequest
46 голосов
/ 02 апреля 2010

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

  1. Способ разделения основного файла сборки в меньшие файлы
  2. Способ повторного использования некоторых частей сборка в других независимых сборках

Какой лучший способ добиться этого в Gradle?

Ответы [ 2 ]

52 голосов
/ 05 апреля 2010

Gradle 0.9 позволяет импортировать скрипт сборки из другого скрипта сборки. Взгляните на: Настройка проекта с использованием внешнего скрипта сборки . В основном это apply from: 'other.gradle'.

Единственное, о чем не упоминается в руководстве пользователя, это то, что параметр 'from' может быть URL-адресом, поэтому вы можете сделать ваши общие сценарии доступными через HTTP где-нибудь (например, в вашем хранилище subversion) и импортировать их из нескольких сборок.

28 голосов
/ 01 декабря 2014

Решение, которое я нашел, подразумевает отображение того, что у вас есть в вашем файле other.gradle.

def getVersionName = { ->
    def stdout = new ByteArrayOutputStream()
    exec {
        commandLine 'git', 'describe', '--tags'
        standardOutput = stdout
    }
    return stdout.toString().trim()
}
ext{
    VERConsts = [:]
    VERConsts['NAME'] = getVersionName()
    VERConsts['NAME_CALL'] = getVersionName
}

Затем в вашем build.gradle файле:

apply from: 'other.gradle'
// ...
android {
    defaultConfig {
        versionName VERConsts['NAME_CALL']()
        // or
        versionName VERConsts['NAME']
    }
}

Тогда versionName будет иметь результат вызова.

Примечания :

  • VERConsts['NAME'] = getVersionName() вызовет getVersionName() и сохранит его результат. Используя его в вашем скрипте, например versionName VERConsts['NAME'] назначит сохраненное значение.
  • VERConsts['NAME_CALL'] вместо этого сохранит ссылку на функцию. Использование VERConsts['NAME_CALL']() в вашем скрипте фактически вызовет функцию и присвоит результат вашей переменной

Первое приведет к тому, что одно и то же значение будет присвоено всему сценарию, а второе может привести к другим значениям (например, если кто-то выдвинет другую версию во время работы вашего сценария).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...