Hallo
Ich habe eine Anwendung (Swing), die ihre Module aus 2 verschiedenen Ordnern lädt. In dem einen Ordner liegen die Module als class-files, in dem 2ten Ordner liegen die selben Module als .jar's. (Grund hierfür ist, das beim Entwickeln die class-files prioritiv geladen werden, zum Ausliefern sind jedoch die .jar-Files geeigneter. Daher kann die Anwendung beides.)
Nun habe ich folgende Modulstruktur die mir ein Problem bereitet:
Anwendung.jar
class-Ordner
--modul.class
--lib-Ordner
----groovy-2.4.5.jar
jar-Ordner
--modul.jar (darin auch lib/groovy-2.4.5.jar)
So, zur Laufzeit läd die Anwendung.jar die modul.class (durch einen URLClassLoader, dem auch lib/groovy-2.4.5.jar übergeben wird). Ich kann problemlos sowas machen:
import groovy.lang.Binding;
Binding=new Binding();
beziehungsweise:
Class myclass=this.getClass().getClassLoader().loadClass("groovy.lang.Binding");
Constructor<?> mycon = myclass.getConstructor();
Object insta=mycon.newInstance();
Binding binding = (Binding)insta;
Das funktioniert solange ich das Modul als class-Files lade. Wenn ich jedoch das Ganze als .jar lade funktioniert das Ganze nicht mehr. Beim Ausführen des Codes bleibt des System bei
new Binding() bzw. mycon.newInstance() hängen. Es wird keine Fehlermeldung geworfen, die Klasse wird ja auch gefunden. Aber es passiert nichts, es geht nicht weiter, die ganze Anwendung steht.
In anderen Modulen gehe ich nach dem gleichen Prinzip vor, da funktioniert das anstandslos. Ich kann mir überhaupt keinen Reim drauf machen was da schief geht. Mein erster Gedanke war ein Problem mit den verschiedenen Class-Loadern, aber dann bekäme ich ja bei dem Cast erst die Exception. Ich bekomme aber garnichts. Es geht einfach bei der Instanziierung nicht weiter.
Was könnt das sein? An was könnt das liegen? Wie könnte ich dem Problem bei kommen? Ich habe schon dran gedacht den Groovy-Code zu hinterlegen um durch zu debuggen, habe den aber im Netz nirgendwo gefunden, nur die Api.
So, ich brauch jetzt erstmal Kaffee, vielleicht könnt ihr mir ja weiterhelfen
Ich habe eine Anwendung (Swing), die ihre Module aus 2 verschiedenen Ordnern lädt. In dem einen Ordner liegen die Module als class-files, in dem 2ten Ordner liegen die selben Module als .jar's. (Grund hierfür ist, das beim Entwickeln die class-files prioritiv geladen werden, zum Ausliefern sind jedoch die .jar-Files geeigneter. Daher kann die Anwendung beides.)
Nun habe ich folgende Modulstruktur die mir ein Problem bereitet:
Anwendung.jar
class-Ordner
--modul.class
--lib-Ordner
----groovy-2.4.5.jar
jar-Ordner
--modul.jar (darin auch lib/groovy-2.4.5.jar)
So, zur Laufzeit läd die Anwendung.jar die modul.class (durch einen URLClassLoader, dem auch lib/groovy-2.4.5.jar übergeben wird). Ich kann problemlos sowas machen:
import groovy.lang.Binding;
Binding=new Binding();
beziehungsweise:
Class myclass=this.getClass().getClassLoader().loadClass("groovy.lang.Binding");
Constructor<?> mycon = myclass.getConstructor();
Object insta=mycon.newInstance();
Binding binding = (Binding)insta;
Das funktioniert solange ich das Modul als class-Files lade. Wenn ich jedoch das Ganze als .jar lade funktioniert das Ganze nicht mehr. Beim Ausführen des Codes bleibt des System bei
new Binding() bzw. mycon.newInstance() hängen. Es wird keine Fehlermeldung geworfen, die Klasse wird ja auch gefunden. Aber es passiert nichts, es geht nicht weiter, die ganze Anwendung steht.
In anderen Modulen gehe ich nach dem gleichen Prinzip vor, da funktioniert das anstandslos. Ich kann mir überhaupt keinen Reim drauf machen was da schief geht. Mein erster Gedanke war ein Problem mit den verschiedenen Class-Loadern, aber dann bekäme ich ja bei dem Cast erst die Exception. Ich bekomme aber garnichts. Es geht einfach bei der Instanziierung nicht weiter.
Was könnt das sein? An was könnt das liegen? Wie könnte ich dem Problem bei kommen? Ich habe schon dran gedacht den Groovy-Code zu hinterlegen um durch zu debuggen, habe den aber im Netz nirgendwo gefunden, nur die Api.
So, ich brauch jetzt erstmal Kaffee, vielleicht könnt ihr mir ja weiterhelfen