Есть ли способ разделить/разделить общие части сборки Gradle
У нас есть несколько независимых построений (каждая независимая сборка представляет собой многопроектную сборку). Основные скрипты сборки становятся довольно большими, так как у нас есть набор общих задач, повторно используемых подпроектами, а также много повторений между независимыми сборками. Мы ищем:
- Способ разделения основного файла сборки
в меньшие файлы
- Способ повторного использования некоторых частей
строить в других независимых сборках
Каков наилучший способ достичь этого в Gradle?
Ответы
Ответ 1
Gradle 0.9 позволяет импортировать сборку script из другой сборки script. Посмотрите: Конфигурирование проекта с использованием внешней сборки script. В основном это apply from: 'other.gradle'
.
В руководстве пользователя не упоминается, что параметр "from" может быть URL-адресом, поэтому вы можете сделать ваши общие скрипты доступными через HTTP где-нибудь (например, ваш репозиторий subversion) и импортировать их из нескольких сборок.
Ответ 2
Решение, которое я нашел, подразумевает отображение вещей, которые у вас есть в вашем файле 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()
и сохранит его результат. Используя его в script, например. versionName VERConsts['NAME']
затем назначит сохраненное значение.
-
VERConsts['NAME_CALL']
вместо этого сохранит ссылку на функцию. Использование VERConsts['NAME_CALL']()
в вашем script фактически вызовет функцию и назначит результат вашей переменной
Первое приведет к тому, что в script будет присвоено то же значение, в то время как последнее может привести к разным значениям (например, если кто-то нажал другую версию, пока работает script).