Ich versuche, einen Eclipse-Code-Builder zu erweitern (zum Generieren von DTOs aus Hibernate-VOs) - und es verwendet Groovy für sein Template-System.Wie lege ich einen eingebetteten Groovy-Skript-Klassenpfad fest?
Der Code das groovy Script erstellen verwendet, ist ein wenig seltsam (nicht das, was ich in dem Groovy docs sehen), aber es funktioniert, vor allem:
GroovyShell shell = new GroovyShell();
script = shell.parse(source);
Dann später:
Binding binding = (bindings == null ? new Binding() : new Binding(bindings));
Script scriptInstance = InvokerHelper.createScript(script.getClass(), binding);
scriptInstance.setProperty("out", out);
scriptInstance.run();
out.flush();
Jetzt funktioniert das ganz gut, bis es einen Verweis auf ein Objekt trifft, das nicht direkt im Projekt ist. Im Skript durchläuft es die Eigenschaften der Klasse, die es verarbeitet - wenn es das tut, betrachtet Groovy alle Methoden und wenn es eine Klassendefinition für einen der Methodenparameter nicht finden kann, wird es kaputt gemacht. In diesem Fall stirbt es, wenn es irgendwelche Hinweise auf Hibernate findet, aber ich bin mir sicher, dass es mit viel mehr auskommen wird. Es muss ihnen nichts tun, aber es kann nicht leben, ohne zu wissen, was sie offensichtlich sind.
Script scheint keinen Classloader zu haben, den ich Klassenpfad Informationen liefern kann, also habe ich versucht, es an die GroovyShell - kein Unterschied.
Was ist der richtige Weg, um dies zu beheben, so dass der Groovy-Interpreter meine Projekte finden kann, referenziert Jars?
Konnte etwas Ähnliches direkt mit .groovy Akten getan werden? (dh ohne sie zuerst zu kompilieren) – hithwen