J'essaie d'étendre un constructeur de code Eclipse (pour générer des DTOs à partir de VO Hibernate) - et il utilise Groovy pour son système de template.Comment définir un classpath de scripts Groovy incorporés?
Le code qu'il utilise pour créer le script groovy est un peu bizarre (pas ce que je vois dans la documentation Groovy) mais il fonctionne, la plupart du temps:
GroovyShell shell = new GroovyShell();
script = shell.parse(source);
Puis, plus tard:
Binding binding = (bindings == null ? new Binding() : new Binding(bindings));
Script scriptInstance = InvokerHelper.createScript(script.getClass(), binding);
scriptInstance.setProperty("out", out);
scriptInstance.run();
out.flush();
Maintenant, cela fonctionne très bien, jusqu'à ce qu'il frappe une référence à un objet qui n'est pas directement dans le projet. Dans le script, il parcourt les propriétés de la classe qu'il traite - quand il le fait, Groovy regarde toutes les méthodes et quand il ne peut pas trouver une définition de classe pour l'un des paramètres de la méthode, il craps. Dans ce cas, il est en train de mourir quand il trouve des références à Hibernate, mais je suis sûr qu'il va s'en sortir avec beaucoup plus. Il n'a pas besoin de leur faire quoi que ce soit, mais il ne peut pas vivre sans savoir ce qu'ils sont apparemment.
Script ne semble pas avoir un chargeur de classe que je peux fournir des informations de chemin de classe, donc j'ai essayé de le fournir à la GroovyShell - aucune différence.
Quelle est la bonne façon de résoudre ce problème afin que l'interpréteur Groovy puisse trouver mes projets référencés Jars?
Est-ce que quelque chose de similaire peut être fait directement avec les fichiers .groovy? (c'est-à-dire sans les compiler en premier) – hithwen