OSGi und transitive Abhängigkeiten

9

Ich verwende Felix Framework für mein OSGi-Projekt, aber ich bin auf ein schwerwiegendes Problem in Bezug auf Abhängigkeiten von Drittanbietern gestoßen.

Ich benutze eclipse und maven-bundle-plugin, um meine Bundles aus den Quellen und der MANIFEST.MF aus der POM.XML-Datei zu generieren. So weit, ist es gut. Wenn ich jedoch eine Drittanbieterabhängigkeit in meinem Bundle habe, suche ich nach einer unendlichen Liste von JARs, die normalerweise keine Bundles sind, und setze sie in mein / bundle Felix-Verzeichnis, bis keine weiteren Abhängigkeiten mehr vorhanden sind.

Ich nenne diesen Prozess "Herunterladen des Internets, damit meine OSGi-Anwendung funktioniert".

Was mache ich falsch? Sicher muss ich etwas sehr falsch machen, weil ich mir nicht vorstellen kann, dass irgendjemand ein Bündel A hat, das von B abhängt, was dann von C und D abhängt, und dann werden diese beiden von mehreren anderen abhängen und so weiter ... suchen Alle diese Abhängigkeiten manuell mit google oder maven central! Das ist verrückt!

Was ist der richtige Weg dies zu automatisieren? Ich hätte gerne eine der beiden Lösungen:

1) In der Lage sein, eine massive JAR-Datei mit all ihren Abhängigkeiten zu erstellen, aber nur die Pakete zu exportieren, die ich möchte, und natürlich kein Paket zu importieren.

2) (Meine bevorzugte Lösung) Eine Möglichkeit, alle meine Abhängigkeiten in einzelne JAR-Dateien zu bekommen, die ich einfach in das / bundle-Verzeichnis einfügen kann.

3) (Noch mehr bevorzugt) Möglichkeit, JARs von Drittanbietern zu verwenden, ohne 8 GB Abhängigkeiten zu meinem Projekt herunterladen zu müssen.

Ich habe Tools gefunden, die mir dies ermöglichen, aber nur für direkte (1. Grades) Abhängigkeiten , sodass transitive Abhängigkeiten manuell von mir gelöst werden können.

Dieses Problem ist kritisch. Das Fehlen eines solchen Tools behindert die Verwendung von OSGi. Ich habe gesucht und gesucht und gesucht, ich bin auf alle 101 Lösungen wie PAX, bndtools und Freunde gestoßen, aber es scheint, dass sie dieses Problem nicht lösen

Bitte helfen Sie mir. Bitte geben Sie ein lebendes Beispiel, wenn Sie können, Menschen wie ich auf der ganzen Welt werden von der Lösung dieses Problems profitieren.

Danke!

-

-

Bearbeiten: Ich füge ein Beispielprojekt an, in dem ich versuche, JScience zu verwenden, aber das resultierende JAR-Paket fragt mich immer nach neuen Importen, dh es ist nicht eigenständig.

>

Link zum Beispiel: Ссылка

Normalerweise versuche ich, JARs von Drittanbietern mithilfe von Eclipse in Bundles umzuwandeln, aber sie müssen immer Pakete importieren, die ich nicht habe. Es ist also eine endlose Situation, wie Sie gesagt haben.

Ich konnte keine Dokumentation zum Tag Conditional_Package für das maven-bundle-plugin finden. Bei ähnlichen Suchanfragen wird jedoch die Inline-Option angezeigt, die ich zuvor ohne Erfolg ausprobiert habe.

Ich habe ein Basisprojekt erstellt, in dem ich eine Klasse mit der JScience-Bibliothek verwende, und in POM.XML habe ich Folgendes:

%Vor%

Ich sage Maven, um alle Pakete zu inline zu schreiben, die nicht aus dem osgi-Framework selbst stammen. Und wenn ich mir die resultierende JAR anschaue, sieht es ziemlich gut aus. Ich habe jetzt nur Pakete anstelle von ganzen JARs eingebettet (allerdings sieht es so aus, als ob ich nicht alle diese Inline-Pakete benötige, da ich nur zwei davon verwende). Außerdem, wenn ich die Datei MANIFEST.MF öffne, kann ich diese problematische Zeile sehen:

%Vor%

sagen, dass ich org.joda.convert und org.xml.sax vermisse.

Was mich erstaunt ist, dass wir über eine Bibliothek (JScience) sprechen, die besagt, dass sie OSGi-kompatibel ist: Ссылка

Was vermisse ich? Ich kann es mir wirklich nicht leisten, JScience nicht zu benutzen. Und ich habe schon mehrere Bibliotheken von Drittanbietern zurückgewiesen, was mir aufgrund der Integrationsschwierigkeiten von OSGi 3rd Party Entwicklungszeiten ersparen würde.

    
PedroD 24.10.2014, 14:09
quelle

1 Antwort

1

Warum lassen Sie Maven nicht einfach die transitive Abhängigkeit auflösen und laden Sie sie herunter.

Sobald Sie sie in pom.xml hinzufügen, kann IDE wie Eclipse (m2e plugin) bereits aufgelöste Jars auflösen, herunterladen und anzeigen. (Sie können mvn dependency:tree auch von der Befehlszeile aus verwenden)
Dann überprüfen und exclude unerwünscht, z.B. optional oder mit Paketen, die bereits von einem anderen Paket exportiert wurden.
Und ja, verwende provided scope z. für org.osgi.*

%Vor%     
Paul Verest 21.04.2016 13:42
quelle