2012-07-07 13 views
17

Es gibt zwei Hauptansätze bei der Entwicklung einer OSGi-Anwendung mit Maven: zuerst POM-first und MANIFEST.Sollte ich zuerst POM oder MANIFEST zuerst verwenden, wenn ich eine OSGi-Anwendung mit Maven entwickle?

Ich bin auf der Suche nach einer Antwort in Form einer Tabelle, die Vor-und Nachteile jeder Methode zeigt.

Um genauer zu sein, ich möchte auch wissen, wie sie sich auf:

  • Maturity von Toolset
  • Herstellerunabhängigkeit
  • Entwicklung Leichtigkeit (die Leute zu finden, umfasst, die die Entwicklung tun können auf die Tooling)
  • Kompatibilität
  • Vermeidung ClassNotFound
  • Vermeidung manueller Arbeit
+0

"Wir spielen BEIDEN Arten von Musik hier ... Country * und * Western." Mit anderen Worten, Sie haben eine falsche Dichotomie aufgestellt, und es gibt mehr Möglichkeiten als "POM zuerst" und "MANIFEST zuerst". Haben Sie sich insbesondere die Bndtools IDE angesehen? –

+1

Diese Frage fällt offensichtlich in die Kategorie der Debatten und Argumente und sollte geschlossen werden. – Robin

+0

Ich kenne nur zwei Methoden, um damit umzugehen: maven-bundle-plugin und tycho-maven-plugin. Ich bin gerade mitten in der Konvertierung meines Eclipse-Plugins, um Tycho jetzt zu benutzen, also habe ich einen "echten" Grund, es zu benutzen. Und meine Referenz OSGi App mit ist nicht Eclipse basiert Felix. Bis jetzt sehe ich mehr Nachteile mit Tycho, wie ich es benutze. –

Antwort

17

Derzeit ist es das, was ich mit

POM-First Pros kommen kann

  • Nutzen bestehende Maven Fähigkeiten, Repositories und Werkzeuge (Maven-Bundle-Plugin).
  • wahrscheinlich einfacher, Leute zu finden, die wissen, wie pom.xml zu verwalten, anstatt MANIFEST.MF zusammen mit pom.xml
  • Die meisten Informationen in MANIFEST.MF kann sich von der pom.xml erhalten werden.
  • Kann mit anderen IDEs arbeiten, nicht nur mit Eclipse-basierten.
  • Weniger invasive, fügen Sie einfach den einzigen Plugin und das Verpackungstyp verändern zu "bündeln"

POM-First Cons

  • ClassNotFoundException eher zur Laufzeit auftreten. Dies kann jedoch mit der Pax-Prüfung gemildert werden (obwohl die Einrichtung sehr kompliziert ist).
  • Noch müssen Sie verstehen, wie das MANIFEST eingerichtet wird, um sicherzustellen, dass das instructions Konfigurationselement korrekt eingestellt ist.

manifest erste Pros (mit tycho-Maven-Plugin)

  • scheinen die empfohlene Vorgehensweise, oder zumindest etwa als der empfohlene Ansatz gesprochen werden, aber ich kann nicht wirklich sehen, Warum hat es einen signifikanten Nutzen? (Daher warum diese Frage gestellt wurde).
  • Geeignet für die Entwicklung von Eclipse-Plugins und integriert sich gut mit PDE
  • Bietet Werkzeuge zum Testen und ermöglicht somit ClassNotFoundException während JUnit Tests anstelle von Laufzeit angezeigt werden.

manifest erste Cons

  • scheint nur auf Eclipse-basierte IDEs gut zu funktionieren. Sie müssen Eclipse nicht verwenden, aber ohne die PDE möchten Sie?
  • Verstößt gegen DRY-Prinzipien, da ich tun muss, halten Sie die Namen und Versionen von POM und MANIFEST.MF synchron.
  • Benötigen Sie Dinge in einer bestimmten Art und Weise
  • Sie können nicht nennen mischen kann bestehende Maven Multiprojekt Installationen bedeuten nicht nur
  • auf OSGi Unterstützung tack
  • Viel mehr Konfiguration im Vergleich zu maven-Bundle-Plugin benötigt wird, um weniger zu erhalten Warnungen: http://wiki.eclipse.org/Tycho/Reference_Card#Examplary_parent_POM
  • Müssen Testfälle ein separates Projekt machen. Es wird nicht ausgeführt, wenn es in src/test/java eingebaut ist.
  • Scheint, dass es nur Klassen testen wird, die ausgesetzt sind, mit anderen Worten die in ".internal." ist nicht testbar.

Wenn ich für eine Empfehlung für ein Unternehmen wurden gebeten, die Maven verwendet bereits und wollen OSGi bewegen, dann wäre es POM erste

Wenn ich für jemanden für eine Empfehlung gebeten wurden, wer macht Eclipse-Plugin-Entwicklung, dann ist es Manifest zuerst - mit Tycho

+0

Gibt es eine Möglichkeit, POM-Abhängigkeiten von MANIFEST.MF zu generieren? –

0

MANIFEST zuerst sperren Sie nicht zu Eclipse (obwohl ich überrascht wäre, wenn mehr als eine kleine Minderheit etwas anderes verwenden würde). Das MANIFEST ist die Datei, die zählt, und muss zu einem Jar hinzugefügt werden, unabhängig davon, wie Sie das tun.

Auf der anderen Seite sperrt POM zuerst vollständig zu Maven, Sie verlieren den Vorteil, dass ein OSGi-Bundle ein normales Glas ist, das Sie beliebig gestalten können.

Ich habe beide versucht, ich bevorzuge MANIFEST zuerst. Die MANIFEST-Datei ist eine wirklich wichtige Datei, ich ziehe es vor, diese Datei zu erstellen, anstatt eine Datei zu erstellen, die diese Datei erzeugt. Wenn etwas Seltsames passiert (und es wird irgendwann passieren), ist die MANIFEST-Datei die erste, die es überprüft, es ist einfacher, wenn es sich um eine eigene Datei handelt. Außerdem wirst du es sowieso kennen müssen.

Also, wenn Maven Ihr Alpha und Omega ist, wird Ihnen POM am besten zusagen, aber Sie werden die MANIFEST-Datei genau kennen müssen.

+3

Ich konnte dieser Position nicht mehr widersprechen, es ist viel besser, MANIFEST zu generieren, als es manuell zu verwalten, weil es so viele duplizierte Informationen enthält (z. B. die importierten Pakete). Das Argument, dass es sehr wichtig ist, ist falsch, weil die '.class'-Dateien in Ihrer Anwendung ebenfalls sehr wichtig sind, und Sie würden nicht davon träumen, diese von Hand zu schreiben. –

+0

Interessant. Ich bin nicht dagegen, eine MANIFEST-Datei zu erstellen, ich sage nur, dass Sie sich trotzdem damit auskennen müssen. Viele Probleme, die beim Stackoverflow auftauchen, können durch Betrachten der MANIFEST-Datei gelöst oder analysiert werden. Ich habe noch nie jemanden gesehen, der einen Bytecode anfordert. Die beiden haben eine andere Rolle. Wie auch immer, ich freue mich auf deine Antwort. –

+1

Ja .. Sie müssen wissen, wie Ihr Manifest aussehen sollte. Wenn Sie das Manifest generieren, müssen Sie es noch überprüfen, es funktioniert gut, aber Sie haben viel weniger manuelle Arbeit. Daher unterstütze ich auch eher das Manifestieren. –

5

Ich denke, Sie sollten nach Anwendungsfall wählen. Für serverseitige OSGi-Projekte bevorzuge ich den ersten Pom-Stil. Es passt gut zu den Maven Builds und ist viel weniger fehleranfällig als Manifest zuerst. In der Tat bnd, was hinter dem Maven-Bundle-Plugin ist, bekommt das Manifest in den meisten Fällen ohne zusätzliche Konfig. Der Trick besteht darin, einige Benennungsregeln zu verwenden. Zum Beispiel, wenn Sie internes Paket impl oder internal nennen, wird das nicht exportiert. Mit diesem Stil können Sie nicht die Eclipse-Plugin-Perspektive verwenden (zumindest ohne bndtools, die ich nicht mag), aber ich habe diese Perspektive noch nicht vermisst. Ich bin ein Entwickler in den Apache Karaf, CXF und Camel Projekten, wo wir diesen Stil verwenden und es funktioniert super. Besonders für CXF und Camel ist es großartig, dass wir OSGi- und Nicht-OSGi-Implementierungen mit demselben Build und denselben Tools unterstützen können.

Für Eclipse RCP-Anwendungen Zuerst muss man sich mit Manifest befassen, da Sie die Plugin-Perspektive und die Eclipse-IDE-Tools benötigen. Wenn Sie das mit Maven kombinieren wollen, dann ist Tycho wahrscheinlich der Weg zu gehen.

+0

Ich fand genau das gleiche, um wahr zu sein. Ich habe mich auch in beiden Methoden entwickelt und werde dies auch weiterhin tun, wenn es angemessen ist. Deshalb verwenden wir Tycho für unseren RCP-Code, so dass wir immer noch maven verwenden können, aber es ermöglicht eine einfachere Entwicklung in Eclipse für RCP, indem man das Manifest king macht. – Robin

+0

Danke, deine Schlussfolgerungen stimmen mit mir überein, eigentlich waren deine Schlussfolgerungen, woran ich dachte, bevor ich überhaupt die Frage schrieb. Der Grund für die Frage ist, die Vor- und Nachteile für jeden aufzulisten, falls ich begründen muss, warum ich einen über den anderen gewählt habe. –

Verwandte Themen