jar in jar

Status
Nicht offen für weitere Antworten.
Hallo,

ich habe in eclipse 3.0 meinem Projekt ein jar hinzugefügt und wenn ich es in eclipse ausführe, funktioniert auch alles.
Wenn ich jetzt aber von meinem Projekt ein jar erstelle (das andere jar ist mit drin), dann kann ich die Funktionen, die das andere jar enthält, nicht mehr ausführen und es erscheint eine ClassNotFoundException.
Was muss ich noch machen, damit das funktioniert?
 
B

Beni

Gast
Du könntest das Jar im Jar mit einem "IrgendeineKlasse.class.getResource" ansprechen, einen InputStream von ihm holen, und mit einer eigenen Implementation des ClassLoaders die Klassen erstellen.

Damit wärst du wohl halben Tag beschäftigt...
... einfacher wäre es, mehrere JARs zu machen. Bei Eclipse kann man beim JAR-generieren einzelne Dateien wegklicken, und wenn du die alte JAR in irgendeinen Ordner setzt, der nicht zu denjenigen Ordnern gehört, die die *.class-Dateien beinhalten, sollte das auch nicht so schwierig sein.

Im Programm kannst du das zweite JAR am einfachsten mit einem URLClassLoader öffnen, dann benötigt "java.exe" nichteinmal irgendwelche Übergabeparameter.
 
Kann ich denn nicht mit Hilfe des URLClassLoader das jar in meinem jar Archiv ansprechen?
Und wie geht das überhaupt mit dem URLClassLoader?
 
B

Beni

Gast
Nein, kannst Du nicht. Soviel ich weiss, gibt es keine URL, die in ein JAR-Archiv hinein zeigt...
Siehe auch die Konstruktoren

(Wenn du erstmal einen URLClassLoader hast (du übergibst ihm einfach die URL zur zweiten JAR), kannst du mit der Methode "loadClass" eine Class laden, und von dieser Class mit der Methode "newInstance" eine Instanz herstellen.)

Wo ich jetzt nicht ganz sicher bin: sobald der ClassLoader existiert, sind seine Klassen im gesammten Programm verfügbar, ohne dass Du noch etwas besonderes machen musst (du kannst einfach "Bla bla = new Bla()" schreiben, und es sollte funktionieren).
 

thE_29

Top Contributor
vielleicht hilft dir das was


Code:
//....
    File fJar = new File("C:\\file.jar");

    URL url = null;
    try
    {
      //holt sich das jar file in url form
      url = fJar.toURL();
      //öffnet es für den classloader
      URLClassLoader urlcl = new URLClassLoader(new URL[]
                                                {url});
      Class clazz = Class.forName("at.klasse.MainClass", true, urlcl);
     }
//.....
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben