Wie kann ich Nicht-OSGi-Bibliotheken zwischen Bündeln in einem OSGi-Container freigeben?

8

Ich bin auf diese Frage gestoßen, als ich versucht habe, die Struts-Pakete zwischen mehreren Bündeln in einem OSGi-Container. Ich wollte vermeiden, dass Abhängigkeiten innerhalb der Bundles dupliziert werden und eine neue Abhängigkeit zwischen ihnen entsteht (indem ein Bundle seine internen Abhängigkeiten für den anderen exportiert).

Es stellt sich heraus, dass die Antwort sehr einfach ist, wenn Sie Maven verwenden, und wenn nicht, können Sie immer noch die Maven-Lösung verwenden, um zu lernen, wie Sie dasselbe Ergebnis mit einem anderen Mechanismus erzeugen können.

Ich fand diesen Ansatz während meines Projekts mehrfach nützlich, daher werde ich hier ein Beispiel veröffentlichen.

    
Hanno Fietz 05.08.2009, 19:04
quelle

2 Antworten

7

Mit Maven ist es sehr einfach, ein OSGi-Paket aus einer beliebigen Bibliothek zu erstellen. Ich denke jedoch, dass das gleiche Ergebnis auch mit anderen Mechanismen erzielt werden kann. Die Maven-Lösung hat mir geholfen zu verstehen, wie es funktioniert.

Das Erstellen des Pakets erfolgt durch Erstellen eines Projekts mit der Bibliothek als Abhängigkeit und anschließendes Packen des Projekts mithilfe des maven-bundle-plugin aus dem Apache Felix Projekt und Angabe die Bibliothekspakete mit der Anweisung Export-Package . Ich nutzte dies, um Google-Protokollpuffer zwischen Bündeln in einem OSGi-Container zu teilen:

%Vor%

Wenn Sie möchten, dass auch alle transitiven Abhängigkeiten in das Bundle gerollt werden, verwenden Sie das bundleall -Ziel des Plugins.

Das Plugin erkennt und berücksichtigt vorhandene OSGi-Manifeste in der Abhängigkeit.

Sie können das Bundle-Plugin auch verwenden, um nur das Manifest zu erstellen und dem jar packing-Plugin (oder der jar-with-dependencies eingebauten Assembly) mitzuteilen, dieses Manifest über den Archivbereich zu verwenden. Die oben verlinkte Seite des Plugins zeigt, wie das geht.

    
Hanno Fietz 05.08.2009, 19:06
quelle
9

Ein zusätzlicher Weg für diejenigen, die nicht so scharf auf Maven sind, nicht in der Lage sind zu portieren, oder vollkommen glücklich mit Ameisen / Efeu

Ich habe festgestellt, dass der einfachste Weg, die angegebene Aufgabe zu erfüllen, darin besteht, die Nicht-OSGi-Bibliothek in eine OSGi-Bibliothek umzuwandeln, indem das Manifest jedes Paket exportiert und einige symbolische Namen / Versionen hinzufügt. Ich konnte dies sehr einfach mit bnd über Ant-Aufgaben (oder sogar direkten Aufruf der Befehlszeile) machen. Es gibt auch Repositories , die eine "osgi-ified" Version vieler populärer Bibliotheken enthalten. Einige Bibliotheken (joda-time) liefern bereits korrekte OSGi-Manifeste.

    
basszero 05.08.2009 19:32
quelle

Tags und Links