Hallo zusammen,
ich bastel gerade ein graphischer Editor mit Möglichkeit weitere "Plugins" / "Extensions" hinuzfügen zu können aufbasis von JavaFX.
Wie kann ich zur Laufzeit eine Jar als Plugin hinzufügen? Ich habe hier sowas gefunden hier: https://stackoverflow.com/questions/60764/how-to-load-jar-files-dynamically-at-runtime
In jede selbsterstelle Plugin Jar von mir enthält eine xml Datei, wo bestimmte Ansichten gespeichert sind. E.g. plugin1.jar -> plugin.xml
Wie kann ich dann die plugin.xml laden? Wenn ich 10 plugins habe, dann würde ich auch 10 plugin.xml haben. Jedes mal wenn ich ein "Add Plugin to App" mache , soll doch irgendwo die Abhängigkeit hinzugefügt werden oder? Die plugin.xml einlesen würde danach doch gehen oder getClass().getResource("plugin.xml")?
Relativ zur Anwendung habe ich ein Plugin Order, wo solche abgelegt werden sollten. Wie kann ich meine Anwendung mit solche Plugins laden, oder in die Abhängigkeit/ Classloader ergänzen?
Ich schätze das ist ein paar Sachen durcheinander geraten.
Vielleicht fangen wir mit der ersten Frage an. Wie kann ich die jar Datei zu meiner Anwendung in die Abhängigkeit hinzufügen? Als Eclipse Plugin hätte ich die manifest Datei gesagt. Aber sowas dynamisches ist schwierig zu sagen. Ich könnte auch eine XML Datei mit Jars auflisten, aber dann müsste ich auch wissen wie ich dynamisch inkludieren soll?
So was ähnliches kann ich doch aufsetzen oder plugin-dependencies.xml?
Grüße
lam
ich bastel gerade ein graphischer Editor mit Möglichkeit weitere "Plugins" / "Extensions" hinuzfügen zu können aufbasis von JavaFX.
Wie kann ich zur Laufzeit eine Jar als Plugin hinzufügen? Ich habe hier sowas gefunden hier: https://stackoverflow.com/questions/60764/how-to-load-jar-files-dynamically-at-runtime
Code:
URLClassLoader child = new URLClassLoader(
new URL[] {myJar.toURI().toURL()},
this.getClass().getClassLoader()
);
Class classToLoad = Class.forName("com.MyClass", true, child);
Method method = classToLoad.getDeclaredMethod("myMethod");
Object instance = classToLoad.newInstance();
Object result = method.invoke(instance);
In jede selbsterstelle Plugin Jar von mir enthält eine xml Datei, wo bestimmte Ansichten gespeichert sind. E.g. plugin1.jar -> plugin.xml
Code:
</plugin>
<view id="mycustomview" uri="de.test.project.MyCustomView"/>
</plugin>
Wie kann ich dann die plugin.xml laden? Wenn ich 10 plugins habe, dann würde ich auch 10 plugin.xml haben. Jedes mal wenn ich ein "Add Plugin to App" mache , soll doch irgendwo die Abhängigkeit hinzugefügt werden oder? Die plugin.xml einlesen würde danach doch gehen oder getClass().getResource("plugin.xml")?
Relativ zur Anwendung habe ich ein Plugin Order, wo solche abgelegt werden sollten. Wie kann ich meine Anwendung mit solche Plugins laden, oder in die Abhängigkeit/ Classloader ergänzen?
Ich schätze das ist ein paar Sachen durcheinander geraten.
Vielleicht fangen wir mit der ersten Frage an. Wie kann ich die jar Datei zu meiner Anwendung in die Abhängigkeit hinzufügen? Als Eclipse Plugin hätte ich die manifest Datei gesagt. Aber sowas dynamisches ist schwierig zu sagen. Ich könnte auch eine XML Datei mit Jars auflisten, aber dann müsste ich auch wissen wie ich dynamisch inkludieren soll?
So was ähnliches kann ich doch aufsetzen oder plugin-dependencies.xml?
Code:
<dependencies>
<plugin>de.test.plugin1.jar</plugin>
<plugin>de.test.plugin2.jar</plugin>
<plugin>de.test.plugin3.jar</plugin>
<plugin>de.test.plugin4.jar</plugin>
</dependencies>
lam