J'ai un script de gradle complexe qui englobe une charge de fonctionnalités autour de la construction et du déploiement d'un certain nombre de projets netbeans dans un certain nombre d'environnements.
Le script fonctionne très bien, mais essentiellement, tout est configuré à travers une demi-douzaine de cartes contenant des informations sur le projet et l'environnement.
Je veux résumer les tâches dans un autre fichier, afin de pouvoir simplement définir mes cartes dans un simple fichier de construction et importer les tâches de l'autre fichier. De cette façon, je peux utiliser les mêmes tâches principales pour un certain nombre de projets et configurer ces projets avec un simple ensemble de cartes.
Quelqu'un peut-il me dire comment je peux importer un fichier gradle dans un autre, d'une manière similaire à la tâche d'Ant? J'ai parcouru les documents de Gradle en vain jusqu'à présent.
Information additionnelle
Après la réponse de Tom ci-dessous, j'ai pensé essayer de clarifier exactement ce que je voulais dire.
Fondamentalement, j'ai un script gradle 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 construction de fourmis, donc j'ai des tâches en gradle pour appeler chacun d'entre 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 sortes d'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.
Ainsi, dans cet exemple, tasks.gradle contiendra 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. De cette façon, tasks.gradle est un fichier qui peut être utilisé par tous les grands projets qui consistent en un certain nombre de sous-projets avec des fichiers de construction et Netbeans.
apply from
exécute immédiatement les tâches externes. Cela peut ne pas être préférable dans la logique d'exécution (c'est-à-dire que je voudrais exécuter les tâches quand je le souhaite, pas tout de suite).apply from
exécute immédiatement les tâches externes. Ne vous laissez pas induire en erreur. Les tâches externes sont configurées, non exécutées.Réponses:
Il y a une nouvelle fonctionnalité dans la version 0.9. Vous pouvez utiliser la
apply from: 'other.gradle'
commande.Lisez ma question sur la même chose à l'adresse: Existe - t-il un moyen de diviser / factoriser les parties communes de la version Gradle
la source
La réponse à la question s'est avérée être dans le système Plugins, où vous pouvez ajouter la fonctionnalité souhaité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 sous forme de Jar bien que je n'ai pas essayé cela.Détails ici: Plugins personnalisés
la source
Eh bien, il est difficile de dire ce qui vous sert le mieux sans voir votre fichier de construction.
Je pourrais supposer que la configuration de votre environnement en tant que construction multi-projets devrait vous fournir l'abstraction que vous recherchez.
Dans la racine de votre 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:Le répertoire racine du projet peut également contenir un
gradle.properties
fichier dans lequel vous définissez les propriétés utilisées par vos projets:Ensuite, dans un fichier supplémentaire de la racine de votre projet,
settings.gradle
vous pointez réellement vers vos sous-projets:Chaque répertoire de sous-projet contient un
build.gradle
fichier contenant uniquement les éléments spécifiques au sous-projet.Peu importe si vous appelez à
gradle
partir de la racine de votre projet ou du répertoire de sous-projet, gradle considérera automatiquement toutes vos définitions faites 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 plugin au-delà du plugin par défaut au niveau racine.
la source