Frage

Wie konvertiere ich eine vorhandene JAR-Datei in ein OSGi-Bundle?

Antwort, Auflösung

Hier ist eine sehr einfache Möglichkeit, eine vorhandene JAR-Datei in ein OSGi-Bundle umzuwandeln, während Sie die Kontrolle über die exportierten Pakete behalten.

Das Beispiel erstellt ein OSGi-Bundle aus dem angehängten Junit-4.4.jar.

Hinweis: Die folgende Methode funktioniert nur in einem Szenario, in dem die JAR-Datei keine Abhängigkeiten zu anderen externen JAR-Dateien aufweist.

  1. Beginnen Sie mit dem Erstellen einer Manifestdatei für das JAR:
    Manifest-Version: 1.0 Created-By: myself Bundle-ManifestVersion: 2 Bundle-Name: JUnit 4.4 bundle Bundle-Description: Package junit 4.4 in an OSGi bundle Bundle-Version: 4.4.0 Bundle-ClassPath: .,junit-4.4.jar Bundle-SymbolicName: org.junit.framework Export-Package: junit.framework,junit.extensions,org.junit.runner,org.junit,junit.textui 

    • Die Bundle-ClassPath Kopfzeile ist so eingestellt, dass sie das Original-JAR so, wie es ist, einbetten kann. Stellen Sie sicher, dass der Wert mit dem Dateinamen des JAR übereinstimmt, das Sie in das Bundle einbetten möchten.
    • Export-Package ist eine Liste von Paketen, die im JAR enthalten sind und die Sie anderen Bundles, welche im OSGi-Container laufen, zur Verfügung stellen möchten.
  2. JAR-Datei.
    Holen Sie sich die JAR-Datei, in unserem Fall von http://mirrors.ibiblio.org/pub/mirrors/maven2/junit/junit/4.4/junit-4.4.jar.
  3. Erstellen Sie die Bundle-JAR-Datei, indem Sie den folgenden Befehl ausführen:
    jar cvfm junit-4.4-bundle.jar manifest.txt junit-4.4.jar 

    Dabei ist manifest.txt der Name der oben erstellten Manifestdatei.

    Das war es auch schon - die resultierende JAR-Datei (als Beispiel angehängt an diese Seite) ist ein OSGi-Bundle, das die unter Export-Package oben aufgeführten Pakete exportiert unter der Verwendung der Klassen der eingebetteten junit-4.4.jar.

Gilt für

Alle OSGi-Container.

Herunterladen

Dieses Werk unterliegt den Bedingungen der Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Twitter™- und Facebook-Beiträge fallen nicht unter die Bedingungen der Creative Commons-Lizenz.

Rechtliche Hinweise   |   Online-Datenschutzrichtlinie