Ich möchte alle Implementierungen einer Schnittstelle zur Laufzeit in einer Java-Anwendung entdecken und diese Klassen dynamisch aus JAR-Dateien laden, die der Benutzer einem Ordner hinzufügen kann. Es ist im Grunde ein Plug-in-System.
Ich habe dafür ein paar Lösungen gefunden:
Gibt es andere weit verbreitete Lösungen dafür?
Update: Es gibt keine Notwendigkeit für Code-Trennung, und OSGi scheint jetzt für meine einfachen Bedürfnisse viel zu komplex zu sein. Ich habe auch "Simple" zum Titel dieser Frage hinzugefügt, um meine Absichten zu verdeutlichen.
Es ist ein bisschen schwer, aber Sie sollten Apache Felix oder Eclipse Equinox , beide sind OSGi-Implementierungen, die sehr lebendig und kickend sind, aber möglicherweise zu viel für Ihre Bedürfnisse sind. Dies ist jedoch eines der Probleme, die OSGi lösen soll.
Sie könnten die Service-Entdeckung von Apache River (früher Jini) versuchen
Es entdeckt Dienste über eine Remote-Schnittstelle und lädt den Proxy für Sie herunter, der aktuell ein RMI-Stub ist.
Wie @skaffman sagte, OSGi und moderne Implementierungen scheinen eine perfekte Lösung zu sein. Wenn Sie auf dem Guice-Zug sind, sollten Sie iPOJO in Erwägung ziehen, das die Anmerkungen im OSGi-Stapel perfekt integriert (Beachten Sie, dass iPOJO auf jeder OSGi-Plattform funktioniert). Wenn Sie mehr im XML / Spring-Zug sind, sollten Sie Blueprint .
Wenn Sie JSPF berücksichtigen, werde ich Ihre Meinung über die Unreife nicht teilen. Da ich bei diesem Projekt ein wenig zusammengearbeitet habe, finde ich es in seinem Bereich sehr nützlich, da es eine einfache Plug-in-Verwendung ermöglicht, ohne die Schwierigkeiten und Klassenpfad-Trennungen, die OSGi bietet.
+1 SPI - es ist leicht, ein wenig Wartung (die Dienste / * Textdateien), aber die Art und Weise, wie Java Klassenlader jede "Autodiscovery" arbeiten, wird nicht 100% zuverlässig sein; Sie können den Aufwand der Textdateien mit einem einfachen Programm reduzieren, das für ein bestimmtes Projekt / Verzeichnis generiert und / oder (ich empfehle) Tests, die alle Implementierungen enthalten sind
+2 OSGi - wenn Sie bereit sind, im Weltergewicht zu gehen, und beachten Sie, dass die Implementierungen leichter und einfacher werden (zumindest einige von ihnen!)
Tags und Links java service-discovery