java project, - ¿Cómo puedo importar un script de Gradle a otro?




to repository (4)

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.


Answers

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



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.


Cuatro formas diferentes de verificar si una matriz contiene un valor

1) Usando la lista:

public static boolean useList(String[] arr, String targetValue) {
    return Arrays.asList(arr).contains(targetValue);
}

2) Utilizando Set:

public static boolean useSet(String[] arr, String targetValue) {
    Set<String> set = new HashSet<String>(Arrays.asList(arr));
    return set.contains(targetValue);
}

3) Usando un bucle simple:

public static boolean useLoop(String[] arr, String targetValue) {
    for (String s: arr) {
        if (s.equals(targetValue))
            return true;
    }
    return false;
}

4) Usando Arrays.binarySearch ():

El código de abajo es incorrecto, aparece aquí para completar. binarySearch () SOLO puede usarse en arreglos ordenados. Encontrarás que el resultado es raro a continuación. Esta es la mejor opción cuando se ordena la matriz.

public static boolean binarySearch(String[] arr, String targetValue) {  
            int a = Arrays.binarySearch(arr, targetValue);
            return a > 0;
        }

Ejemplo rápido:

String testValue="test";
String newValueNotInList="newValue";
String[] valueArray = { "this", "is", "java" , "test" };
Arrays.asList(valueArray).contains(testValue); // returns true
Arrays.asList(valueArray).contains(newValueNotInList); // returns false






java ant groovy build gradle