Comment puis-je importer un script Gradle dans un autre?

J’ai un script de gradation complexe qui regroupe une foule de fonctionnalités liées à la création et au déploiement de plusieurs projets Netbeans dans plusieurs environnements.

Le script fonctionne très bien, mais il est essentiellement composé d’une demi-douzaine de cartes contenant des informations sur le projet et l’environnement.

Je souhaite que les tâches soient abstraites dans un autre fichier, de manière à pouvoir simplement définir mes cartes dans un simple fichier de génération et importer les tâches à partir de l’autre fichier. De cette manière, je peux utiliser les mêmes tâches de base pour un certain nombre de projets et configurer ces projets avec un ensemble simple de cartes.

Quelqu’un peut-il me dire comment je peux importer un fichier de graduel dans un autre, d’une manière similaire à la tâche de Ant? J’ai traîné les documents de Gradle sans résultat jusqu’à présent.

Information additionnelle

Après la réponse de Tom ci-dessous, j’ai pensé essayer de clarifier exactement ce que je veux dire.

Fondamentalement, j’ai un script de gradation qui exécute un certain nombre de sous-projets. Cependant, les sous-projets sont tous des projets Netbeans et sont livrés avec leurs propres scripts de génération de fourmis. J’ai donc des tâches à accomplir pour appeler chacun d’eux.

Mon problème est que j’ai une configuration en haut du fichier, telle que:

projects = [ [name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"], [name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"] ] 

Je génère ensuite des tâches telles que:

 projects.each({ task "checkout_$it.shortname" << { // Code to for example check module out from cvs using config from 'it'. } }) 

J’ai beaucoup de ces extraits de génération de tâches, et tous sont génériques – ils dépendent entièrement de la configuration dans la liste des projets.

Donc, ce que je veux, c’est un moyen de mettre cela dans un script séparé et de l’importer de la manière suivante:

 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. 

Donc, dans cet exemple, tasks.gradle aura tout le code de génération de tâche générique, et sera exécuté pour les projets définis dans le fichier build.gradle principal. Ainsi, tasks.gradle est un fichier qui peut être utilisé par tous les grands projets constitués de plusieurs sous-projets avec des fichiers de génération Netbeans.

Il y a une nouvelle fonctionnalité dans 0.9. Vous pouvez utiliser apply from: 'other.gradle' commande apply from: 'other.gradle' .

Lisez ma question à propos de la même chose à: Existe – t-il un moyen de diviser / factoriser les parties communes de la construction de Gradle?

La réponse à la question s’est avérée être dans le système de plugins, où vous pouvez append la fonctionnalité désirée dans un ensemble de plugins qui peuvent être des fichiers groovy situés dans le répertoire buildSrc/src/main/groovy . Les plugins peuvent également être regroupés en tant que Jar, mais je n’ai pas encore essayé.

Détails ici: Plugins personnalisés

Eh bien, il est difficile de dire ce qui vous convient le mieux sans voir votre fichier de construction.

Je peux supposer que la mise en place de votre environnement en tant que construction multi-projets devrait vous fournir l’abstraction que vous recherchez.

Dans votre racine de projet, build.gradle vous définissez tous les éléments spécifiques à votre domaine, ainsi que les éléments qui s’appliquent à tous vos sous-projets:

 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() 

Le répertoire racine du projet peut également contenir un fichier gradle.properties lequel vous définissez les propriétés utilisées par vos projets:

 buildDirName=staging repo.dest.dir=/var/repo ... 

Ensuite, dans un fichier supplémentaire de la racine de votre projet nommé settings.gradle vous pointez réellement vers vos sous-projets:

 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') ... 

Chaque répertoire de sous-projet contient un fichier build.gradle contenant uniquement des éléments spécifiques au sous-projet.

Peu importe si vous invoquez gradle depuis votre gradle racine ou sous-projet, gradle prendra automatiquement en compte toutes vos définitions effectuées dans les différents fichiers.

Notez également qu’aucune tâche de compilation ne sera exécutée pour la racine de votre projet tant que vous ne chargez aucun plug-in au-delà du plug-in par défaut au niveau racine.