[Refactoring] ClassLoader Verzeichnis durchsuchen lassen

  • Themenstarter Knecht Purpecht
  • Beginndatum
K

Knecht Purpecht

Gast
Hallo,

ich würde einer Anwendung gerne eine Art von Plug-In-System einbinden. Dazu habe ich mir gedacht, dass es einen Ordner gibt, in welchem class-Dateien liegen. Die dadurch repräsentierten Klassen dürfen allerdings in verschiedenen Packages liegen, also im Dateisystem in unterschiedlichen Ordnern.

Zum Laden der Klassen während der Laufzeit wollte ich dann ein ClassLoader-Objekt verwenden (Alternativen gibt es ja, soweit ich weiß, keine).

Meine Frage ist nun: Wie kann ich möglichst komfortabel sämtliche Klassen in diesem Plug-In-Ordner laden? Theoretisch müsste ich rekursiv alle Unter-Ordner nach *.class-Dateien durchsuchen und mir aus den Pfaden dann den entsprechenden Klassen-Namen zusammen basteln. Das erscheint mir jedoch etwas zu kompliziert, weil ich dann auch noch den Pfad-Separator des entsprechenden OS unterscheiden müsste.
Gibt es da vielleicht schon eine Sequenz von Methoden-Aufrufen, die genau das erfüllt?
 

Wildcard

Top Contributor
Nach meiner Erfahrung zu dieser Art Frage gibt es zwei Möglichkeiten:
1) Du brauchst das eigentlich gar nicht, aber hättest es gerne, weil plugins 'in' sind :) In dem Fall würde ich mir die Arbeit sparen

2) Du hast einen echten Use Case dafür und willst auf diese Art eine flexible Anwendungsarchitektur realisieren. In diesem Fall solltest du zu einer bestehenden Lösung (OSGi) greifen, weil plugin Architektur sehr viel komplizierter ist als ein paar Klassen mit einem Classloader zu laden.
 

DanZ

Bekanntes Mitglied
Mal ausgehend davon, dass du 3) das ganze nur aus Interesse und Spaß an der Sache probieren willst: dann sollte das Verfahren die Klassennamen zusammenzubauen das einfachste sein.
Außerdem versteh ich nicht, wofür du die Pfadseperators brauchst? Du kannst dir einen URLClassLoader erstellen, der auf den Ordner mit den Classdateien konfiguriert ist. Der erledigt das Laden der Klassen für dich. Beim Zusammenbauen der Klassennamen brauchst du auch keine Seperatoren - du musst nur nach jedem Ordnernamen ein "." anhängen. Oder versteh ich dich jetzt falsch?
 
K

Knecht Purpecht

Gast
Vielleicht hätte ich nicht Plug-In sagen sollen; ganz so komplex soll es tatsächlich nicht werden. Eigentlich geht es eher um Klassen, die von einem Interface erben und dort eine konkrete Methode implementieren. Diese Methode wird dann anschließend vom Programm ausgeführt.

Dem Benutzer soll also die Möglichkeit eingeräumt werden, eine konkrete Implementierung für diese Methode anzugeben und anschließend in der Anwendung dann auszuführen.

Für diesen Fall sollte mein Ansatz völlig ausreichend sein (hoffe ich).
 

DanZ

Bekanntes Mitglied
Ich versteh dein Problem trotzdem nicht, den Ordner rekursiv nach *.class Dateien zu durchsuchen und die zu laden sind vielleicht 15 Zeilen.
 

mvitz

Top Contributor
Dafür kann man Prima den Serviceloader (in JavaSE bereits enthalten) nutzen, solange man sicherstellt, dass immer nur eine Implementierung des Interfaces im Classpath ist (sollten es mehrere sein, muss das Programm sich für eine entscheiden).

Ansonsten einfach den User den Namen der Klasse übergeben lassen und eine Factory mit Class.forName nutzen.
 
K

Knecht Purpecht

Gast
Es soll ja gerade mehr als nur eine Implementierung der Methode zur Auswahl stehen.

Grob kann man sich das ganze wie Filter für Bilddateien vorstellen. Man übergibt der Methode ein Bild und die entsprechende Implementierung liefert dann ein neues (gefiltertes) Bild zurück.

Im Menu soll der Benutzer dann alle möglichen Implementierungen für Filter zur Auswahl haben. Kennt man das Interface, kann der Benutzer ebenfalls selbst eine Implementierung schreiben, die Klasse in den Ordner verschieben und anschließend im Programm auswählen.

Ich habe das Ganze jetzt auch irgendwie mit einem ClassLoader zusammen gefrickelt, allerdings kommt das wohl noch nicht ganz so mit Klassen klar, die in eigenen Packages liegen. Liegt bestimmt am Pfadnamen, der nicht der Namenskonvention für Klassen entspricht. Das weiß ich eben nicht. Soll aber auch nicht weiter tragisch sein, dann ist der Benutzer für Implementierungen eben gezwungen, auf Packages zu verzichten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Frage zu Refactoring statischer Methoden Allgemeine Java-Themen 4
V Schnelles Refactoring Allgemeine Java-Themen 3
J Automatisches Refactoring? Allgemeine Java-Themen 7
L Classpath Zur Laufzeit bestimmte Klassen in Classloader hinzufügen? Allgemeine Java-Themen 4
L Eigenener ClassLoader wirft java.lang.NoClassDefFoundError Allgemeine Java-Themen 0
D Classloader ohne Package Allgemeine Java-Themen 10
N Klasse via ClassLoader laden Allgemeine Java-Themen 2
D ClassLoader für Variablen einer Klasse setzen Allgemeine Java-Themen 24
schlingel Webstart/Applet Problem - Classloader-Bug Allgemeine Java-Themen 7
M Security Manager für bestimmte Klassen/Classloader? Allgemeine Java-Themen 3
hdi ClassLoader / Constructor Call intern Allgemeine Java-Themen 11
C inteface not visible from classloader Allgemeine Java-Themen 2
M jdbc treiber (h2) mit eigenem ClassLoader laden Allgemeine Java-Themen 4
B Eigener ClassLoader Allgemeine Java-Themen 9
MQue ClassLoader Pfad ausgeben Allgemeine Java-Themen 6
S Problem mit ClassLoader.getSystemResource !! Allgemeine Java-Themen 3
V Image laden - URL über ClassLoader ermitteln Allgemeine Java-Themen 2
J Eigener ClassLoader wird nicht immer verwendet Allgemeine Java-Themen 3
E Wieder mal der Classloader Allgemeine Java-Themen 6
F ClassLoader und "Cache" Allgemeine Java-Themen 2
MQue ClassLoader Allgemeine Java-Themen 5
N ClassLoader - Laden von Bytecode aus einer Datenbank Allgemeine Java-Themen 6
P Klasse über eigenen Classloader laden: SecurityException Allgemeine Java-Themen 11
N Classpath mit ClassLoader künstlich erweitern Allgemeine Java-Themen 2
P System.getProperty zu Classloader Allgemeine Java-Themen 21
G Classloader Problem Allgemeine Java-Themen 10
M Bibliotheksname zur Laufzeit ermitteln (Classloader) Allgemeine Java-Themen 7
MQue ClassLoader Allgemeine Java-Themen 18
G Problem mit URL classloader Allgemeine Java-Themen 10
S classloader + jar + resourcen in dem jar Allgemeine Java-Themen 4
F mit classloader klassen ausserhalb *.jar einlesen Allgemeine Java-Themen 4
G Font mittels ClassLoader in .jar wirft NotFoundException Allgemeine Java-Themen 10
P Kompilerfehler: at java.lang.ClassLoader.loadClassInternal(U Allgemeine Java-Themen 16
T ClassLoader und Zugriff auf unbekannte Klassen Allgemeine Java-Themen 5
C ClassLoader - dymisches Laden von JDBC Drivers Allgemeine Java-Themen 3
R Problem mit Classloader Allgemeine Java-Themen 2
D Programm mit eigenem ClassLoader funktioniert nicht Allgemeine Java-Themen 12
K Problem mit ClassLoader - Laden von Resourcen aus Jar's Allgemeine Java-Themen 14
C Problem mit ClassLoader Allgemeine Java-Themen 2
T Brauche Hilfe bei ClassLoader Allgemeine Java-Themen 2
G cachender ClassLoader u.v.m. Allgemeine Java-Themen 5
G ClassLoader Allgemeine Java-Themen 3
R ClassLoader funktioniert in Verbindung mit JAR-Datei nicht Allgemeine Java-Themen 8
S Verzeichnis schreibzugriffe erlaubt unabhängig von ACL und Posix Allgemeine Java-Themen 11
T Geeignetes Verzeichnis Allgemeine Java-Themen 5
P Wofür ist das Verzeichnis $HOME/.oracle_jre_usage? Allgemeine Java-Themen 3
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
K NetBeans Ordner bei 'Clean&Build' automatisch in dist Verzeichnis kopieren Allgemeine Java-Themen 0
C Verzeichnis ins JMenu einlesen Allgemeine Java-Themen 2
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
C Umgebungsvariable Java-Datei in anderem Verzeichnis ausführen Allgemeine Java-Themen 2
R Welches User-Verzeichnis wählen für Configurationsdateien - Windows Allgemeine Java-Themen 2
R Änderungen in einem Verzeichnis beobachten - Windows Allgemeine Java-Themen 3
S Aus executable jar Verzeichnis erstellen Allgemeine Java-Themen 8
reibi Leeres Verzeichnis in ein Zipfile einfügen Allgemeine Java-Themen 12
reibi Schreibrechte auf ein Verzeichnis Allgemeine Java-Themen 3
G Log4J Verzeichnis der Log-Datei konfigurieren Allgemeine Java-Themen 8
A Drucken ändert aktuelles Verzeichnis Allgemeine Java-Themen 2
reibi Aktuelles Verzeichnis in den Klassenpfad nehmen Allgemeine Java-Themen 9
T Eclipse Dateien einzeln aus einem Verzeichnis laden! Allgemeine Java-Themen 6
B ObjectOutputStream verzeichnis wählen Allgemeine Java-Themen 8
Benji0815 Verzeichnis wie im Windows Explorer in einem JTree anzeigen Allgemeine Java-Themen 6
L Applet Verzeichnis lesen Allgemeine Java-Themen 3
B Verzeichnis durchsuchen geschwindigkeit optimieren Allgemeine Java-Themen 6
B in welchem verzeichnis liegen alle installierten klassen? Allgemeine Java-Themen 6
G Klassen aus Verzeichnis laden Allgemeine Java-Themen 13
S Aktuelles Verzeichnis - CMD/Kommandozeilenproblem Allgemeine Java-Themen 9
G Zwischen Datei und Verzeichnis unterscheiden. Allgemeine Java-Themen 11
C Velocity liest template-Dateien nicht aus einem Verzeichnis Allgemeine Java-Themen 3
heart_disease Verzeichnis-Probleme mit ZIP Allgemeine Java-Themen 4
M Verzeichnis durchlaufen und Dateien umbennen Allgemeine Java-Themen 2
P Verzeichnis in JAR-Datei durchgehen Allgemeine Java-Themen 2
G Dateien und Verzeichnisse in einem Verzeichnis zählen Allgemeine Java-Themen 9
W Verzeichnis für Benutzerfiles Allgemeine Java-Themen 7
S Ist File ein root-Verzeichnis? Allgemeine Java-Themen 2
J Herangehensweise: FTP-Transfer von Verzeichnis Allgemeine Java-Themen 8
G Java Klasse in einem anderen Verzeichnis aufrufen Allgemeine Java-Themen 3
H mit javac Verzeichnis kompilieren Allgemeine Java-Themen 2
E Existierendes Verzeichnis nicht gefunden Allgemeine Java-Themen 4
M Verzeichnis auslesen - Fehler in isDirectory()? Allgemeine Java-Themen 4
F Verzeichnis, in dem sich die ausführende jar Datei befindet Allgemeine Java-Themen 9
K Verzeichnis rekursiv aus JAR-Datei extrahieren Allgemeine Java-Themen 6
O Ein Verzeichnis aus der Root ablesen/Dateitypen registrieren Allgemeine Java-Themen 5
P Verzeichnis auwählen Allgemeine Java-Themen 2
S Starten einer Anwendung von einem anderen Verzeichnis Allgemeine Java-Themen 3
P Mit getResource() ein ganzes Verzeichnis laden Allgemeine Java-Themen 5
T Verzeichnis der Klasse Allgemeine Java-Themen 7
J Verzeichnis aus meinem JAR auslesen und abspeichern. Allgemeine Java-Themen 2
G Verzeichnis löschen? Allgemeine Java-Themen 3
W Aktuelles Verzeichnis rausfinden Allgemeine Java-Themen 13
S Probleme mit dem Compilieren von Dateien in Verzeichnis Allgemeine Java-Themen 4
G Dateien zählen im Verzeichnis Allgemeine Java-Themen 11
G aktuelles Verzeichnis Allgemeine Java-Themen 2
A Verzeichnis auflisten - auch innerhalb eines Jars Allgemeine Java-Themen 6
G Verzeichnis überwachen Allgemeine Java-Themen 13
S Temporäres Verzeichnis anlegen? Allgemeine Java-Themen 4
G Java Runtime Verzeichnis ermitteln Allgemeine Java-Themen 3
S dringend-verzeichnis von festplatte einlesen Allgemeine Java-Themen 9
P Dateinamen testen? Schreibrechte auf Verzeichnis testen? Allgemeine Java-Themen 8
M Verzeichnis verschieben? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben