D
DynCla
Gast
Guten Tag,
ich weiß leider nicht, wie ich mein Thema unmissverständlich in den Titel packen soll. Daher erkläre ich hier nochmal mein genaues Anliegen.
Folgendes:
Ich möchte während der Laufzeit Klassen laden. Das ist auch kein Problem. Zumindest, wenn die Hauptklasse in Form einer *.class Datei vorliegt. In den packages lässt sich das alles wunderbar verarbeiten.
Aber die Realität soll anders aussehen.
Ich möchte ein Java-Programm in Form eines ausführbaren Jar-Archivs. Die zu ladenen Klassen sollen aber NICHT in dem Jar-Archiv sein (die Klassen werden nachträglich modulartig hinzugefügt).
Das Problem:
Wie stell ich es an, dass die Jar Datei erhalten bleibt, aber die *.class Dateien aus normalen Ordner bzw. packages bezieht?
Ein Beispiel ist wohl hilfreich.
Das Programm legen wir im package prog ab:
Das wird mit allen anderen wichtigen Dingen zu einem Jar-Archiv zusammengefasst.
(/Program.jar)
Angenommen die dynamischen Klassen sind alle im package mod;
(/mod)
Dann müsste mod ansich insgesamt prog.mod heißen, wenn man es per *.class ausführt.
Die normale *.class Datei läge ja in /prog/Program.class. Dann müssten die Module in /prog/mod liegen.
(/java prog.Program)
Als Jar-Archiv führt man das Programm ja folglich mit
/java -jar Program.jar
aus. Die Module liegen nun einfach in /mod.
Die finale Frage:
Wie kann das Jar-Archiv auf die Klassen im package mod zugreifen?
In der Main Klasse werden die Module mit
geladen. Befindet man sich nun im Jar-Archiv, so versucht main natürlich, aus dem package prog.mod zu laden, was aber nicht geht, da mod kein Teil von prog ist.
Die package-Angabe in main müsste dann ja irgendwie sowas wie "...mod.DerivedModule" sein, weil mod in dem übergelegenen package hausiert. Aber das geht so sicherlich nicht (habe es nicht ausprobiert :O).
So, fertig. Bedauerlicherweise fürchte ich, dass das ganze mehr als umständlich formuliert ist . Ich lasse mich mal überraschen. Falls es niemand versteht, versuche ich, das ganze nochmal anschaulicher zu erklären. Für Hilfe bin ich sehr dankbar.
Grüße
ich weiß leider nicht, wie ich mein Thema unmissverständlich in den Titel packen soll. Daher erkläre ich hier nochmal mein genaues Anliegen.
Folgendes:
Ich möchte während der Laufzeit Klassen laden. Das ist auch kein Problem. Zumindest, wenn die Hauptklasse in Form einer *.class Datei vorliegt. In den packages lässt sich das alles wunderbar verarbeiten.
Aber die Realität soll anders aussehen.
Ich möchte ein Java-Programm in Form eines ausführbaren Jar-Archivs. Die zu ladenen Klassen sollen aber NICHT in dem Jar-Archiv sein (die Klassen werden nachträglich modulartig hinzugefügt).
Das Problem:
Wie stell ich es an, dass die Jar Datei erhalten bleibt, aber die *.class Dateien aus normalen Ordner bzw. packages bezieht?
Ein Beispiel ist wohl hilfreich.
Das Programm legen wir im package prog ab:
Code:
package prog;
// main(...) kommt nun folglich
Das wird mit allen anderen wichtigen Dingen zu einem Jar-Archiv zusammengefasst.
(/Program.jar)
Angenommen die dynamischen Klassen sind alle im package mod;
(/mod)
Dann müsste mod ansich insgesamt prog.mod heißen, wenn man es per *.class ausführt.
Die normale *.class Datei läge ja in /prog/Program.class. Dann müssten die Module in /prog/mod liegen.
(/java prog.Program)
Als Jar-Archiv führt man das Programm ja folglich mit
/java -jar Program.jar
aus. Die Module liegen nun einfach in /mod.
Die finale Frage:
Wie kann das Jar-Archiv auf die Klassen im package mod zugreifen?
In der Main Klasse werden die Module mit
Code:
public static void main(String[] args) {
try {
Class c = Class.forName("mod.DerivedModule");
Module m = (Module)c.newInstance();
m.Execute();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
Die package-Angabe in main müsste dann ja irgendwie sowas wie "...mod.DerivedModule" sein, weil mod in dem übergelegenen package hausiert. Aber das geht so sicherlich nicht (habe es nicht ausprobiert :O).
So, fertig. Bedauerlicherweise fürchte ich, dass das ganze mehr als umständlich formuliert ist . Ich lasse mich mal überraschen. Falls es niemand versteht, versuche ich, das ganze nochmal anschaulicher zu erklären. Für Hilfe bin ich sehr dankbar.
Grüße