K
keymail
Guten Tag,
ich würde gerne ein jar-file zur laufzeit laden damit es dem
Classloader bekannt ist. Sozusagen wie als wenn es im Classpath beim
Start vorhanden wäre.
Ich habe ein Plugin für ein Plugin (ist nötig), welches
folgendermaßen aussieht:
Kernprogramm (wird gestartet)
--------------------------------------------------
Ebene 1: Plugin für das Kernprogramm (wird vom Kernprogramm geladen)
--------------------------------------------------
Ebene 2: Plugin für das Plugin (wird/soll von Ebene 1
gestartet/werden)
das dumme ist das das es nötig ist das Ebene 1 die abstracte Klasse
aus einem jar kennen
muss um zu merken das Plugin der Ebene 2 diese abstracte klasse
extended.
Jedes Plugin der Ebene 2 muss die abstract class "Plugin" extenden
damit es auf Ebene 1 als Plugin erkannt wird.
Leider kann Ebene 1 nur erkennen wie die Klasse auf Ebene 2 heisst aber
nicht das sie die abstrakte Klasse "Plugin" erweitert. Das führt
einfach dazu das die Abfrage if (o instance of "Plugin") nicht hinhaut
und somit ein Fehler erzeugt wird, obwohl o die abstracte Klasse
"Plugin" erweitert.
Geladen wird die Klasse folgendermaßen:
JarClassLoader jarLoader = new
JarClassLoader(this.pluginFile.getAbsolutePath());
String className = jarLoader.getClassNamefromManifest();
Class c = jarLoader.loadClass(className, true);
Object o = c..newInstance();
if(o instanceof Plugin) {
this.plugin = (Plugin) o;
}
Das ganze funktioniert einwandfrei wenn das Kernprogramm das jar-file
mit der Klasse "Plugin" im Classpath enthält. Das ist aber für ein
Plugin normal nicht möglich und ich will das nicht. Gibt es also eine
Möglichkeit wie man dieses Jar vorher dynamisch dem Classpath
hinzufügen kann?
ich würde gerne ein jar-file zur laufzeit laden damit es dem
Classloader bekannt ist. Sozusagen wie als wenn es im Classpath beim
Start vorhanden wäre.
Ich habe ein Plugin für ein Plugin (ist nötig), welches
folgendermaßen aussieht:
Kernprogramm (wird gestartet)
--------------------------------------------------
Ebene 1: Plugin für das Kernprogramm (wird vom Kernprogramm geladen)
--------------------------------------------------
Ebene 2: Plugin für das Plugin (wird/soll von Ebene 1
gestartet/werden)
das dumme ist das das es nötig ist das Ebene 1 die abstracte Klasse
aus einem jar kennen
muss um zu merken das Plugin der Ebene 2 diese abstracte klasse
extended.
Jedes Plugin der Ebene 2 muss die abstract class "Plugin" extenden
damit es auf Ebene 1 als Plugin erkannt wird.
Leider kann Ebene 1 nur erkennen wie die Klasse auf Ebene 2 heisst aber
nicht das sie die abstrakte Klasse "Plugin" erweitert. Das führt
einfach dazu das die Abfrage if (o instance of "Plugin") nicht hinhaut
und somit ein Fehler erzeugt wird, obwohl o die abstracte Klasse
"Plugin" erweitert.
Geladen wird die Klasse folgendermaßen:
JarClassLoader jarLoader = new
JarClassLoader(this.pluginFile.getAbsolutePath());
String className = jarLoader.getClassNamefromManifest();
Class c = jarLoader.loadClass(className, true);
Object o = c..newInstance();
if(o instanceof Plugin) {
this.plugin = (Plugin) o;
}
Das ganze funktioniert einwandfrei wenn das Kernprogramm das jar-file
mit der Klasse "Plugin" im Classpath enthält. Das ist aber für ein
Plugin normal nicht möglich und ich will das nicht. Gibt es also eine
Möglichkeit wie man dieses Jar vorher dynamisch dem Classpath
hinzufügen kann?