java - the - ¿Cómo puedo importar un script de Gradle a otro?
the two build files generated by android studio are in (3)
Bueno, es difícil saber qué te sirve mejor sin ver tu archivo de compilación.
Podría suponer que intensificar tu entorno como una creación de proyectos múltiples debería proporcionarte la abstracción que estás buscando.
En su proyecto root build.gradle
, define todas las cosas específicas de su dominio, así como las cosas que se aplican a todos sus subproyectos:
repositories {
add(new org.apache.ivy.plugins.resolver.FileSystemResolver()) {
name = ''destRepo''
addIvyPattern( file( project.properties[''repo.dest.dir'']).absolutePath + ''/[organisation]/[module]/ivys/ivy(-[revision]).xml'')
addArtifactPattern( file( project.properties[''repo.dest.dir'']).absolutePath + ''/[organisation]/[module]/[type]s/[artifact](-[revision]).[ext]'')
descriptor = ''optional''
checkmodified = true
}
...
}
...
subprojects {
sourceCompatibility = 1.5
targetCompatibility = 1.5
group = ''my.group''
version = ''1.0''
uploadArchives {
uploadDescriptor = true
repositories {
add rootProject.repositories.destRepo
}
}
apply{ type my.group.gradle.api.plugins.MyPlugin }
...
}
dependsOnChildren()
El directorio raíz del proyecto también puede contener un archivo gradle.properties
donde usted define las propiedades utilizadas por sus proyectos:
buildDirName=staging
repo.dest.dir=/var/repo
...
Luego, en un archivo adicional de su raíz de proyecto denominado settings.gradle
, apunta a sus subproyectos:
include ''my-first-component'',
''my-second-component''
...
project('':my-first-component'').projectDir = new File(rootDir, ''path/to/first/component'')
project('':my-second-component'').projectDir = new File(rootDir, ''path/to/second/component'')
...
Cada directorio de build.gradle
contiene un archivo build.gradle
que contiene solo el subproyecto específico.
No importa si invoca gradle
desde el directorio raíz de su proyecto o subproyecto, gradle considerará automáticamente todas sus definiciones en los diversos archivos.
También tenga en cuenta que no se ejecutará ninguna tarea de compilación para su raíz de proyecto siempre que no cargue ningún complemento más allá del complemento predeterminado en el nivel raíz.
Tengo un script de gradle complejo que envuelve una gran cantidad de funcionalidades en torno a la construcción y la implementación de una serie de proyectos netbeans en varios entornos.
El script funciona muy bien, pero en esencia está configurado a través de media docena de mapas que contienen información del proyecto y del entorno.
Quiero resumir las tareas en otro archivo, de modo que pueda simplemente definir mis mapas en un archivo de compilación simple e importar las tareas desde el otro archivo. De esta manera, puedo usar las mismas tareas centrales para una serie de proyectos y configurar esos proyectos con un conjunto simple de mapas.
¿Alguien puede decirme cómo puedo importar un archivo gradle a otro, de manera similar a la tarea de Ant? He rastreado los documentos de Gradle en vano hasta el momento.
Información adicional
Después de la respuesta de Tom a continuación, pensé en intentar aclarar exactamente a qué me refiero.
Básicamente tengo un script de gradle que ejecuta varios subproyectos. Sin embargo, los subproyectos son todos proyectos de Netbeans, y vienen con sus propios scripts de compilación ant, por lo que tengo tareas en gradle para llamar a cada uno de estos.
Mi problema es que tengo alguna configuración en la parte superior del archivo, como por ejemplo:
projects = [
[name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"],
[name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"]
]
Luego genero tareas tales como:
projects.each({
task "checkout_$it.shortname" << {
// Code to for example check module out from cvs using config from ''it''.
}
})
Tengo muchos de estos tipos de fragmentos de generación de tareas, y todos son genéricos; dependen por completo de la configuración en la lista de proyectos.
Entonces, lo que quiero es una forma de poner esto en un script separado e importarlo de la siguiente manera:
projects = [
[name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"],
[name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"]
]
import("tasks.gradle") // This will import and run the script so that all tasks are generated for the projects given above.
Por lo tanto, en este ejemplo, tasks.gradle tendrá todo el código genérico de generación de tareas y se ejecutará para los proyectos definidos en el archivo build.gradle principal. De esta forma, tasks.gradle es un archivo que puede ser utilizado por todos los proyectos grandes que consisten en una serie de subproyectos con archivos de compilación Netbeans.
Hay una nueva característica en 0.9. Puede usar apply from: ''other.gradle''
comando apply from: ''other.gradle''
.
Lea mi pregunta sobre lo mismo en: ¿Hay alguna manera de dividir / factorizar partes comunes de la construcción de Gradle?
La respuesta a la pregunta resultó ser en el sistema de complementos, donde puede agregar la funcionalidad deseada en un conjunto de complementos que pueden ser archivos geniales ubicados en el directorio buildSrc/src/main/groovy
. Los complementos también se pueden agrupar como un Jar, aunque no lo he intentado.
Detalles aquí: Complementos personalizados