build process - transportador - ¿Hay alguna manera de dividir/factorizar partes comunes de la construcción de Gradle?
como dividir una circunferencia en 5 partes iguales (2)
La solución que encontré implica mapear las cosas que tienes en tu other.gradle
file.
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
}
Luego, en tu archivo build.gradle
:
apply from: ''other.gradle''
// ...
android {
defaultConfig {
versionName VERConsts[''NAME_CALL'']()
// or
versionName VERConsts[''NAME'']
}
}
Entonces, versionName
tendrá el resultado de la llamada.
Notas :
-
VERConsts[''NAME''] = getVersionName()
llamará agetVersionName()
y almacenará su resultado. Utilizándolo en su secuencia de comandos, por ejemplo,versionName VERConsts[''NAME'']
asignará el valor almacenado. -
VERConsts[''NAME_CALL'']
su lugar almacenará una referencia a la función. El uso deVERConsts[''NAME_CALL'']()
en su script realmente llamará a la función y asignará el resultado a su variable
El primero dará como resultado que se asigne el mismo valor en el guión, mientras que el último puede dar lugar a valores diferentes (por ejemplo, si alguien presiona otra versión mientras se está ejecutando el guión).
Tenemos varias compilaciones independientes (cada compilación independiente es una compilación multiproyecto). Los scripts de construcción principales se vuelven bastante grandes ya que tenemos un conjunto de tareas comunes reutilizadas por subproyectos, así como también hay mucha repetición entre compilaciones independientes. Lo que estamos buscando es:
- Una forma de dividir el archivo de compilación principal en archivos más pequeños
- Una forma de reutilizar algunas partes de la construcción en otras construcciones independientes
¿Cuál es la mejor manera de lograr eso en Gradle?
Gradle 0.9 le permite importar un script de compilación desde otro script de compilación. Eche un vistazo a: Configuración del proyecto utilizando un script de compilación externo . Básicamente se apply from: ''other.gradle''
.
Una cosa que la guía del usuario no menciona es que el parámetro ''de'' puede ser una URL, por lo que puede hacer que sus scripts compartidos estén disponibles a través de HTTP en alguna parte (por ejemplo, su repositorio de subversión) e importarlos desde varias compilaciones.