Thread bleibt stehen bei jar in jar

Hazared

Neues Mitglied
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 🙂
 
Leider hab ich das Problem bislang nicht lösen können. Das Problem besteht auch nur bei der groovy.jar, bei allen anderen libs die ich ausprobiert hab funktioniert das Ganze einwandfrei. Was ich aber beim rumprobieren rausgefunden hab ist, das die groovy.jar anstandslos funktioniert wenn ich diese bereits in der Anwendung selbst einbinde und nicht erst in geladenen Modulen, hier ist es dann auch egal ob ich die groovy.jar in die jar der Anwendung entpacke oder als jar einbinde, ebenso funktioniert alles wenn ich die groovy.jar als externe lib einbinde.

Was mich so stutzig macht ist ja, das die Klassen der groovy.jar alle gefunden werden, nur bei der Instanziierung bleibt irgendwas hängen.
Hat da wirklich keiner ne Idee oder nen Tip? Ich bin für jeden Rat dankbar.
 

Zurück
Oben