119 votes

Y compris un script groovy dans un autre groovy

J'ai lu comment il vous suffit d'importer un fichier groovy dans un autre script groovy

Je veux définir des fonctions dans un fichier groovy et appeler ces fonctions à partir d'autres groovy fichiers.

Je comprends que ce serait en utilisant Groovy comme un langage de script je.e, je n'ai pas besoin classes/objets. Je suis en train de quelque chose comme lis qui peut être fait en groovy. Toutes les variables seront affirmé à partir de Java et je veux exécuter groovy script en ligne de commande.

Est-ce possible ? Quelqu'un peut-il fournir quelques exemples.

124voto

jmq Points 2582
 evaluate(new File("../tools/Tools.groovy"))
 

Mettez cela en haut de votre script. Cela apportera le contenu d'un fichier groovy (il suffit de remplacer le nom du fichier entre les guillemets par votre script groovy).

Je fais cela avec une classe étonnamment appelée "Tools.groovy".

46voto

emesx Points 6951

À partir de Groovy 2.2, il est possible de déclarer une classe de script de base avec la nouvelle annotation de transformation @BaseScript AST.

Exemple:

fichier MainScript.groovy :

 abstract class MainScript extends Script {
    def meaningOfLife = 42
}
 

fichier test.groovy :

 import groovy.transform.BaseScript
@BaseScript MainScript mainScript

println "$meaningOfLife" //works as expected
 

46voto

grahamparks Points 10187

Une autre façon de faire est de définir les fonctions dans une classe groovy, d’analyser et d’ajouter le fichier au chemin de classe à l’exécution:

 File sourceFile = new File("path_to_file.groovy");
Class groovyClass = new GroovyClassLoader(getClass().getClassLoader()).parseClass(sourceFile);
GroovyObject myObject = (GroovyObject) groovyClass.newInstance();
 

7voto

omnisis Points 999

Groovy n'a pas de mot-clé import, comme les langages de script qui va faire un littéral inclure un autre fichier de contenu (allusion ici: Ne groovy fournir un mécanisme inclus?). En raison de son objet/classe de la nature, vous avez à "jouer à des jeux" pour faire des choses comme ce travail. Une possibilité est de faire l'ensemble des fonctions de l'utilitaire de statique (puisque vous avez dit qu'ils n'utilisez pas d'objets), puis effectuer une statique de l'importation dans le cadre de votre exécution de l'interpréteur. Vous pouvez appeler ces méthodes comme des "fonctions globales". Une autre possibilité serait d'utiliser un objet de Liaison ( http://groovy.codehaus.org/api/groovy/lang/Binding.html ) lors de la création de votre Coquille et la liaison de toutes les fonctions que vous voulez les méthodes (l'inconvénient serait d'avoir à énumérer toutes les méthodes dans la liaison, mais vous pourriez peut-être utiliser la réflexion). Encore une autre solution serait de remplacer methodMissing(...) le délégué de l'objet assigné à votre shell qui permet en gros de faire la distribution dynamique à l'aide d'une carte ou quelle que soit la méthode que vous souhaitez.

Plusieurs de ces méthodes sont illustrées ici: http://www.nextinstruction.com/blog/2012/01/08/creating-dsls-with-groovy/. Laissez-moi savoir si vous voulez voir un exemple d'une technique particulière.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X