64 Stimmen

Wahl des Java-Plugin-Frameworks

Wir versuchen herauszufinden, wie wir ein einfaches Plugin-Framework für einen Dienst implementieren können, der es ermöglicht, verschiedene Arten von Rechnern "einzubinden".

Nach der Lektüre eines Nummer von Beiträgen über Java-Plugin-Frameworks scheint es so, als ob die häufigsten Optionen sind:

OSGI scheint mehr zu sein, als wir brauchen.

"Selber machen" ist in Ordnung, aber es wäre schön, wenn man eine gemeinsame Bibliothek wiederverwenden könnte.

Wir haben also nur noch den JPF und den JSPF. JPF scheint sich nicht mehr in der aktiven Entwicklung zu befinden.

JSPF scheint sehr einfach und wirklich alles, was wir brauchen. Allerdings habe ich nicht viel darüber gehört. Ich habe nur einen gesehen Beitrag auf StackOverflow darüber. Hat sonst noch jemand Erfahrung mit JSPF? Oder irgendwelche anderen Kommentare zu dieser Designwahl?


Update : Es gibt nicht unbedingt eine richtige Antwort auf diese Frage aber wir werden Pavols Idee übernehmen, da wir nur eine sehr, sehr einfache Lösung brauchen. Danke EoH für die schöne Anleitung.

44voto

EoH Punkte 801

(Disclaimer: Ich bin der Autor von JSPF, also nehmen Sie meinen Kommentar besser mit einem Körnchen Salz ;-)

Der Hauptgrund, warum ich mit dem JSPF angefangen habe, war, dass ich das gleiche Problem hatte wie Sie jetzt: Ich suchte nach einer einfachen Lösung, um mein Diplomarbeitsprojekt 1) erweiterbar zu machen und 2) ihm eine mehr oder weniger klare Codestruktur zu geben.

Der Grund, warum ich mich nicht für ein bestehendes Framework entschieden habe, war, dass die meisten von ihnen zu Beginn so schwergewichtig waren, dass ich mich im Lesen der Dokumentation verlor und fast meine ursprüngliche Aufgabe vergaß. Nach Ihrer Aussage also

Wir versuchen zu bestimmen, wie wir ein einfaches Plugin-Framework für einen Dienst, den wir implementieren verschiedene Arten von Rechnern erlaubt "einfügen" können.

Ich denke, Sie könnten JSPF einen Versuch geben und sehen, wie weit Sie innerhalb von ein oder zwei Stunden kommen.

Die endgültige Entscheidung hängt jedoch auch ein wenig davon ab, was genau Sie erreichen wollen und wie die konkreten Umstände sind.

Ich habe von einer Reihe von Personen, die es zur Strukturierung ihrer Projekte oder zum Laden von Plugins in ihre Projekte verwenden, positive Ergebnisse gehört. Andererseits weiß ich auch von einer Person in unserer Abteilung, die es wieder verworfen hat, weil er das Gefühl hatte, dass es nicht gut zu seinem Programmierstil passt.

Um also Ihre Frage kurz zu beantworten (und sicherlich in einer voreingenommenen Weise), würde ich

OSGi für Projekte und Teams

  • die groß sind und an denen viele Menschen arbeiten
  • die den Aufwand für die Einrichtung der Infrastruktur rechtfertigen
  • die die angebotenen spezifischen Dienstleistungen benötigen

JPF für Projekte und Teams

  • von mittlerer Größe (?, ehrlich gesagt bin ich mir nicht sicher, welche Projekt-/Teamgröße sie anstreben)
  • die strukturiertere Möglichkeiten zur Organisation ihres Codes benötigen, wie XML-Konfigurationen, detailliertes Plugin-Lebenszyklus-Management, erweiterbare Plugins ...

JSPF für Projekte und Teams

  • von geringer Größe, nach einer wendig Paradigma
  • die einfach nur etwas brauchen, das sofort funktioniert, ohne dass sie etwas konfigurieren oder einrichten müssen
  • bereit sind, einige Funktionen für Einfachheit zu opfern

Ich hoffe, Sie finden das für Ihr Szenario am besten geeignete Plugin-Framework. Und egal, was Sie ausprobieren, ich würde mich freuen, von Ihren Ergebnissen zu hören.

30voto

Pavol Juhos Punkte 1867

Wenn Sie nur einen (oder einige wenige) nicht sehr komplexe "Erweiterungspunkte" planen, reichen vielleicht ein gut definierter SPI und ein Stück Konfiguration aus. Sie müssen kein Plugin-Framework verwenden.

Mit "Konfiguration" meine ich einen Mechanismus zum Auffinden Ihrer Plugins. Zum Beispiel etwas wie META-INF/services/ oder einfach Ihre Plugins in einer Konfigurationsdatei auflisten.

Weitere Einzelheiten (auf Anfrage):

SPI = Schnittstelle zum Dienstanbieter ein "implementierungsseitiges Äquivalent einer API". Um mehr zu erfahren, suchen Sie nach dem Unterschied zwischen API und SPI. In diesem Zusammenhang ist es jedoch nur ein schicker Begriff für eine Schnittstelle, die von Ihren Plugins implementiert werden muss (d.h. sie definiert den Vertrag für Ihre Plugins).

Ein schöner, kurzer Artikel " Erstellen einer Service-Provider-Schnittstelle " von Ethan Nicholas beschreibt, wie man sein eigenes SPI auf ähnliche Weise erstellt, wie es in verschiedenen Teilen der Java-Plattform selbst geschieht.

META-INF/services/ kann als ein allgemeinerer Ansatz zur Erstellung von SPIs betrachtet werden. Weitere Informationen finden Sie in dem entsprechenden Abschnitt der JAR-Datei-Spezifikation .

2voto

Faz Punkte 186

Wenn Sie eine wirklich einfache Lösung brauchen, probieren Sie jin-plugin . Es ist ein minimalistisches Plugin-Framework für Java und PHP.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X