2017-03-07 2 views
1

Ich habe ein OSGI Bundle, das eine Abhängigkeit von einer 3rd-Party-Bibliothek hat, ich möchte diese Bibliothek nicht im Container bereitstellen, ich würde es lieber in meinem Bundle einbetten.Einbetten von transitiven Abhängigkeiten in OSGI

Natürlich hat diese Bibliothek ihre eigenen Abhängigkeiten, ich möchte sie auch einbetten.

Ich bin mit dem Maven Bundle Plugin:

<plugin> 
<groupId>org.apache.felix</groupId> 
<artifactId>maven-bundle-plugin</artifactId> 
    <configuration> 
    <instructions> 
     <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> 
     <Bundle-Description>${project.description}</Bundle-Description> 
     <Bundle-Vendor>${bundle.vendor}</Bundle-Vendor> 
     <Meta-Persistence>...</Meta-Persistence> 
     <Export-Package>...</Export-Package> 
     <Import-Package>...</Import-Package> 
     <Embed-Dependency>3rd-Party</Embed-Dependency>      
     <Embed-Transitive>true</Embed-Transitive> 
     </instructions> 
    </configuration> 
</plugin> 

Als Ergebnis 3rd-Party wird in dem resultierenden Bündel eingebettet, aber nicht seine transitive Abhängigkeiten, als ob <Embed-Transitive>true</Embed-Transitive> keine Auswirkungen haben.

So habe ich einige Fragen

  • Ist dies der richtige Weg, um eine 3rd-Party-Bibliothek in einer transitiven Weise einzubetten?
  • Wird die generierte Manifest-Datei berücksichtigt (nicht das Importieren von Paketen, die zur 3rd-Party-Bibliothek und ihren Abhängigkeiten gehören)?

Danke

Antwort

1

Über Embed-Abhängigkeit: Wenn Sie einen Blick auf die felix docs nehmen verwenden sie immer einen Bereich wie: ;scope=compile|runtime.

Möglicherweise müssen die Namen der abhängigen Bündel auch zu der angegebenen Regex passen. Wenn du die meisten Gläser einbetten willst und nur ein paar weglassen willst, kannst du vielleicht einbetten * und dann einige mit! Ausschließen.

Über das Manifest: Das Maven-Bundle-Plugin sollte darauf achten, die Importe an Ihre eingebetteten Pakete anzupassen. Daher sollte es keine Importe für Pakete geben, die eingebettet sind.

+0

Hallo Christian, also denken Sie, dass es ein Problem mit der genauen Angabe der 3rd-Party-Bibliothek gibt? – isco

+0

wie für die Importe für Pakete, die eingebettet sind, wächst die Liste der importierten Pakete sehr schnell, wenn ich Abhängigkeiten einbetten, denke ich, das Plugin kümmert sich nicht um diese – isco

+0

Ein großes Problem mit vielen Bibliotheken ist, dass sie eine Menge optionaler verwenden Abhängigkeiten. Wenn Sie einfach eine solche Bibliothek einbetten, erhalten Sie auch die optionalen Deps. Ein solcher Baum kann sehr schnell wachsen. Wenn dies bei Ihnen der Fall ist und Sie wissen, dass Sie einige der optionalen Deps nicht benötigen, können Sie versuchen, sie in maven auszuschließen. –

Verwandte Themen