Есть ли способ разделить/сэкономить
-
24-09-2019 - |
Вопрос
У нас есть несколько независимых сборков (каждая независимая сборка является многопроектной сборкой). Основные сценарии сборки становятся довольно большими, поскольку у нас есть набор общих задач, повторно используемых подпроектами, а также много повторяющихся между независимыми сборками. Мы ищем:
- Способ разделить основной сборник сборки на более мелкие файлы
- Способ повторного использования некоторых частей сборки в других независимых сборках
Как лучше всего достичь этого в Градле?
Решение
Gradle 0.9 позволяет импортировать сценарий сборки из другого сценария сборки. Посмотри на: Настройка проекта с использованием внешнего сценария сборки. Анкет В основном это apply from: 'other.gradle'
.
Одна вещь, которую пользователь не упоминает, заключается в том, что параметр «от» может быть URL -адресом, поэтому вы можете сделать свои общие сценарии доступными через HTTP (например, ваш репозиторий подрывной деятельности) и импортировать их из нескольких сборок.
Другие советы
Решение, которое я нашел 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']()
В вашем скрипте фактически вызовет функцию и назначит результат вашей переменной
Первый приведет к тому, что одно и то же значение будет назначено через скрипт, в то время как последнее может привести к различным значениям (например, если кто -то выталкивает другую версию во время работы вашего скрипта).