Hi,
ich versuche ein Programm "FunnyFunctions" zu schreiben, welches erlaubt weitere Funktionen zu integrieren.
Ich habe also, das Hauptprogramm "FunnyFunctions".
Zudem habe ich einen Ordner namens "External".
In den Ordner "External" soll ein Dritter eine ".class" Datei ablegen können,
deren Funktionalität beim starten des Hauptprogramms zur Verfügung steht.
Ich sage also, dass jede ".class" Datei ein bestimmtes Interface implementieren muss,
mit den Funktionen die dem Hauptprogramm später zur Verfügung stehen sollen.
Die neue Klasse wird dynamisch über einen URLClassLoader geladen.
Allerdings habe ich ein Problem. Sowohl das Hauptprogramm als auch die neue Klasse
müssen das Interface kennen. Somit muss man jedes mal von Hand den ClassPath setzen zu dem Pfad wo sich das Interface befindet. Dies ist jedoch recht mühselig.
Mein Ziel ist es, dass ein unerfahrener Benutzer sich von irgendwo her die neue Klasse in Form einer ".class" Datei holt oder runterlädt und diese lediglich in einen bestimmten Ordner, in diesem Fall in den Ordner "External" einfügt. Anschließend soll beim Ausführen des Hauptprogramm die neue Funktionalität zur Verfügung stehen.
Frage: Wie schaffe ich es ohne immer wieder den ClassPath selbst setzen zu müssen das Interface sowohl dem Hauptprogramm als auch der neuen Klasse bekannt zu machen?
Ich habe auch einen recht interessanten Artikel gefunden zum Erstellen von Java Plugins gefunden Java Blog Buch : D) Plugin-Entwicklung in Java. Jedoch wird da immer der ClassPath von Hand gesetzt, was ich ja vermeiden will.
ich versuche ein Programm "FunnyFunctions" zu schreiben, welches erlaubt weitere Funktionen zu integrieren.
Ich habe also, das Hauptprogramm "FunnyFunctions".
Zudem habe ich einen Ordner namens "External".
In den Ordner "External" soll ein Dritter eine ".class" Datei ablegen können,
deren Funktionalität beim starten des Hauptprogramms zur Verfügung steht.
Ich sage also, dass jede ".class" Datei ein bestimmtes Interface implementieren muss,
mit den Funktionen die dem Hauptprogramm später zur Verfügung stehen sollen.
Die neue Klasse wird dynamisch über einen URLClassLoader geladen.
Allerdings habe ich ein Problem. Sowohl das Hauptprogramm als auch die neue Klasse
müssen das Interface kennen. Somit muss man jedes mal von Hand den ClassPath setzen zu dem Pfad wo sich das Interface befindet. Dies ist jedoch recht mühselig.
Mein Ziel ist es, dass ein unerfahrener Benutzer sich von irgendwo her die neue Klasse in Form einer ".class" Datei holt oder runterlädt und diese lediglich in einen bestimmten Ordner, in diesem Fall in den Ordner "External" einfügt. Anschließend soll beim Ausführen des Hauptprogramm die neue Funktionalität zur Verfügung stehen.
Frage: Wie schaffe ich es ohne immer wieder den ClassPath selbst setzen zu müssen das Interface sowohl dem Hauptprogramm als auch der neuen Klasse bekannt zu machen?
Ich habe auch einen recht interessanten Artikel gefunden zum Erstellen von Java Plugins gefunden Java Blog Buch : D) Plugin-Entwicklung in Java. Jedoch wird da immer der ClassPath von Hand gesetzt, was ich ja vermeiden will.
Damit diese beiden Klassen als Schnittstelle zwischen Plugin und Programm agieren können, müssen sowohl die Plugins, als auch die Anwendung selbst, diese beiden Interfaces kennen. Es bietet sich also an, ein eigenes PluginInterface.jar zu erstellen, welches aus dem PluginManager und dem Pluggable Interface besteht. Dieses JAR muss dann während der Entwicklung der Applikation und der Plugins als Classpath-Eintrag zur Verfügung stehen. Das Programm selbst benötigt die Schnittstelle natürlich auch beim Ausführen.