Ich versuche, ein Groovy-Skript von Java unter Verwendung GroovyClassLoader
auszuführen. Im Grunde, was ich tue, ist dies:Hat ein Groovy-Skript, das von Java ausgeführt wird, den gleichen Klassenpfad?
GroovyClassLoader groovyLoader = new GroovyClassLoader(Thread.currentThread().getContextClassLoader());
clazz = groovyLoader.parseClass(myFile);
GroovyObject go = (GroovyObject) go.newInstance();
return go.invokeMethod("MyMethod", myObject);
Das Problem, das ist, wenn ich die groovy Datei bin Parsen, meine Importe nicht aufgelöst werden, obwohl die Klassen sind in den Java Classpath. Wenn ich eine Zeile mit hinzuzufügen:
groovyLoader.addClasspath("MyclassPath");
dann funktioniert alles einwandfrei (das ist unser letzter Ausweg, falls wir nicht in der Lage sind, dies herauszufinden). Das lässt mich denken, dass es zwei verschiedene Klassenpfade gibt, einen für Java und einen für Groovy. Da ich jedoch den Java-Klassenlader als Konstruktorargument für den GroovyClassloader übergebe, würde ich denken, dass, wenn die Klassen nicht im Groovy-Klassenpfad gefunden werden, sie in Java nachgeschlagen werden sollten.
Bin ich falsch? Kann jemand etwas Licht darauf werfen?
Vielen Dank.
Ändert sich etwas, wenn Sie keinen eigenen Classloader übergeben, sondern nur den groovyClassLoader-Konstruktor no-arg verwenden? – Gimby