¿Hay alguna forma de dividir/factorizar partes comunes de la construcción de gradientes?

StackOverflow https://stackoverflow.com/questions/2566685

  •  24-09-2019
  •  | 
  •  

Pregunta

Tenemos varias compilaciones independientes (cada construcción independiente es una construcción de proyectos múltiples). Los principales scripts de construcción se vuelven bastante grandes ya que tenemos un conjunto de tareas comunes reutilizadas por subproyectos, así como hay una gran repetión entre las construcciones de independientes. Lo que estamos buscando es:

  1. Una forma de dividir el archivo de compilación principal en archivos más pequeños
  2. Una forma de reutilizar algunas partes de la construcción en otras compilaciones independientes

¿Cuál es la mejor manera de lograr eso en Gradle?

¿Fue útil?

Solución

Gradle 0.9 le permite importar un script de compilación de otro script de compilación. Mira esto: Configuración del proyecto utilizando un script de compilación externo. Básicamente es apply from: 'other.gradle'.

Una cosa que la guía del usuario no menciona es que el parámetro 'desde' 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 de múltiples compilaciones.

Otros consejos

La solución que encontré implica mapear las cosas que tiene en su other.gradle expediente.

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
}

Entonces, en tu build.gradle expediente:

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

Entonces el versionName tendrá el resultado de la llamada.

Notas:

  • VERConsts['NAME'] = getVersionName() llamará getVersionName() y almacene su resultado. Usándolo en tu script, por ejemplo, versionName VERConsts['NAME'] Luego asignará el valor almacenado.
  • VERConsts['NAME_CALL'] En su lugar, almacenará una referencia a la función. Usando VERConsts['NAME_CALL']() en su script llamará realmente la función y asignará el resultado a su variable

El primero dará como resultado que se asigne el mismo valor a través del script, mientras que el segundo puede dar lugar a diferentes valores (por ejemplo, si alguien presiona otra versión mientras su script se está ejecutando).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top