2015-04-07 8 views
6

Ich habe eine JAR-Datei, die ich in ein OSGi-Bundle konvertieren muss. Ich habe nicht den ursprünglichen Quellcode für die JAR-Datei.Bestehendes JAR in OSGi-Bundle konvertieren

Ich habe versucht, die Antworten zu verwenden, aus: How to create OSGi bundle from jar library?

Allerdings sind sie ziemlich veraltet.

Edit: Ich muss mehrere konvertieren, aber eine feste Anzahl von Gläsern.

+0

Gibt es eine Methode, die Eclipse nicht einbezieht? – CodeTower

+0

http://wiki.osgi.org/wiki/Migration –

+1

Diese [blog] (http://skysailserver.blogspot.de/2013/10/converting-ordinary-jar-into-osgi.html) ist über das Erstellen der Bündel _without_ mit Eclipse. – evandor

Antwort

6

Option 1-BND-Plattform verwenden, um Ihre OSGi-Bundles zu erstellen, wenn häufige Ergänzungen/Aktualisierungen der Tonkrüge erwarten, oder wenn Sie Ihre Abhängigkeiten von Maven-Repositories abrufen können

Wir verwenden bnd-platform (Ich bin auch der Autor), um Abhängigkeiten von Drittanbietern zu verwalten und daraus OSGi-Bundles zu erstellen. Sie können es mit beiden Abhängigkeiten verwenden, die von Maven-Repositories und lokalen Jars abgerufen werden (siehe README). Wenn Sie regelmäßig Ihre Abhängigkeiten hinzufügen oder aktualisieren, würde ich vorschlagen, dass Sie versuchen bnd-Plattform. Es ist ein Plugin für Gradle, Sie können einfach mit this template starten - fügen Sie einfach Ihre Jar-Dateien hinzu und stellen Sie die Konfiguration bereit, wie in der Projekt-README (Bündel symbolische Namen, Versionen) beschrieben, und führen Sie gradlew bundles aus.

Option 2 - verwenden bnd Ihr OSGi-Bundles zu bauen, wenn Sie es einmal tun oder Ergänzungen/Aktualisierungen sind selten

Wenn Sie nur einmal diesen Prozess tun oder nur selten, eine einfache Möglichkeit, um eine OSGi zu erstellen Bündel aus einem bestehenden Jar soll direkt bnd on the command line verwenden. Das einzige, was Sie brauchen, ist Java und das bnd jar. Sie können wrap verwenden, um zu versuchen, ein JAR-Objekt automatisch zu umbrechen oder eine .bnd-Datei mit instructions for bnd zu erstellen (z. B. um nur bestimmte Pakete zu exportieren).

Beispiel .bnd Datei:

-classpath: lib/trove-2.0.4.jar 
-output: gnu.trove-2.0.4.jar 
Export-Package: *;-split-package:=merge-last;-noimport:=true 
Import-Package: * 
Bundle-Version: 2.0.4 
Bundle-Name: GNU Trove Collections Plug-in 
Bundle-SymbolicName: gnu.trove 

Beispielaufruf:

java -jar <path to bnd>.jar trove-2.0.4.bnd 

BND Jar-Download ist nicht mehr direkt über die Website angeboten werden, ist eine gute Alternative zu download it from Maven Central.

+0

Ich habe Option 2 verwendet. Es hat gut funktioniert. Vielen Dank. – CodeTower

2

Das Projekt Eclipse Bundle Recipe bietet einen Maven-basierten Ansatz zum Hinzufügen von OSGi-Metadaten zu JARs, die von einem Maven-Repository verwendet werden. Trotz des Namens wird Eclipse nicht verwendet.

In seinem Kern verwendet es die bnd tool. Dieses Werkzeug ist wie ein Schweizer Taschenmesser. Es analysiert Gläser und Klassendateien und berechnet Paketimport und -exporte korrekt. Sie sollten bnd verwenden, um proprietäre Gläser selbst zu konvertieren. Es ist available in Maven Central.

+0

Dies funktioniert nicht, wenn Sie diese Abhängigkeit über mehrere Bundles hinweg teilen - Sie erhalten einen Klassenlader-Konflikt – zacheusz

+0

@zacheusz, Bitte öffnen Sie eine _new_ Frage mit dem spezifischen Problem, dem Sie gegenüberstehen. Es sieht so aus, als ob Sie ein Problem mit der spezifischen Bibliothek haben. Im Allgemeinen funktionieren Bundles, die durch Verarbeitung von JARs mit ** bnd ** erstellt wurden, sehr gut. Einige Bibliotheken benötigen jedoch zusätzliche Schritte, um gute OSGi-Bürger zu werden. – Gunnar

0

oder nur osgi benutzen installieren, wie unten mit Wrap-Option.

osgi:install wrap:file:/u01/repository/com/oracle/ojdbc6/11.2.0/ojdbc6-11.2.0.jar 

dies wird die JAR-Datei als Bundle bereitstellen und Sie können das Bündel unter "$ fuse_home/data/cache/Bündel {id} /version0.0" -Ordner bekommen.

+0

Nur als eine Randnotiz: Um dies zu tun, müssen Sie Pax URL Wrap installieren. –

Verwandte Themen