Wie Teile ich nicht-OSGi Bibliotheken zwischen bundles in einem OSGi-container?
Stieß ich auf diese Frage, wenn versuchen zu teilen, das Streben Pakete zwischen mehreren bundles innerhalb einer OSGi-container. Ich wollte vermeiden, duplizieren der Abhängigkeiten innerhalb des bundles und die Einführung einer neuen Abhängigkeit zwischen Ihnen (die von einem bundle-export der internen Abhängigkeiten für den anderen zu teilen).
Es stellt sich heraus die Antwort ist sehr einfach, wenn Sie geschehen, zu verwenden, Maven, und wenn Sie nicht, können Sie immer noch die Maven-Lösung zu lernen, wie man das gleiche Ergebnis mit einem anderen Mechanismus.
Fand ich diesen Ansatz sinnvoll, mehrmals während meines Projekts, also poste ich hier ein Beispiel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen zusätzlichen Pfad für diejenigen, die nicht so scharf auf maven nicht in der Lage zu Hafen, oder vollkommen zufrieden mit ant/ivy
Ich habe festgestellt, dass die einfachste Möglichkeit zum ausführen der angegebenen Aufgabe ist, die nicht-OSGi-library in ein OSGi-Bibliothek, indem die manifest-export jedes Paket und add-on einige zugehörige symbolische Namen /Versionen. Ich habe dazu in der Lage, SEHR leicht mit bnd über ant-tasks (oder sogar direkten Kommandozeilen-Aufruf). Es gibt auch repositories enthalten, die "osgi-freundlich" version von vielen populären Bibliotheken. Einige Bibliotheken (joda-time) sind schon der Versand mit der richtigen OSGi-Manifest-Dateien.
Mit Maven ist es sehr einfach, um ein OSGi-bundle aus einer Bibliothek. Allerdings denke ich, dass das gleiche Ergebnis kann erstellt werden, die mit anderen Mechanismen, auch. Die Maven-Lösung hat mir geholfen, zu verstehen, wie es funktioniert.
Erstellen des Bundles erfolgt durch die Erstellung einer Projekt, das die Bibliothek als Abhängigkeit und dann Verpacken Sie das Projekt mit maven-bundle-plugin aus der Apache Felix Projekt und die Angabe der Bibliothek Pakete mit der
Export-Package
Unterricht. Ich habe diese zu teilen, Google Protocol Buffers zwischen bundles innerhalb einer OSGi-container:Wenn Sie möchten, dass alle transitiven Abhängigkeiten rollten in die Bündel, so verwenden Sie
bundleall
Ziel des plugins.Das plugin erkennt und den bestehenden OSGi-manifestiert sich in der Abhängigkeit.
Können Sie auch die bundle-plugin zu erstellen, das manifest und sagen, die
jar
Verpackung-plugin (oder dasjar-with-dependencies
builtin Montage) zu verwenden, die sich über die Archiv-Sektion. Die plugin-Seite oben zeigt, wie das zu tun.