Ich versuche, den Unterschied zwischen dem folgendenOSGi-Bundle vs jar Abhängigkeit
<dependency>
<groupId>com.myspace.order</groupId>
<artifactId>dal</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
UND
<dependency>
<groupId>com.myspace.order</groupId>
<artifactId>dal</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>bundle</type>
</dependency>
The dal Artefakt selbst hat Verpackung angegeben als Bündel zu verstehen:
<packaging>bundle</packaging>
Jetzt, wenn ich das Dal Artefakt bereitstellen, sehe ich es im Repo als ein Glas (mit einem Manifest darin) veröffentlicht. In diesem Fall sollte meine Abhängigkeit von dal sein. Sollte es vom Typ Bündel oder Glas sein? Wenn ich OSGI mache, gehe ich davon aus, den Typ als Bundle anzugeben. Ist das richtig? Oder kann ich hier nur eine Jar-Abhängigkeit haben?
„zum Beispiel, wird es nicht beschweren, wenn Sie versuchen, Pakete zu verwenden, nicht durch das Bündel exportiert Sie je nach .... " Bedeutet dies, dass OSGI-Abhängigkeiten zur Laufzeit erzwungen (und erkannt) werden? Ich dachte, das Exportpaket wurde zur Kompilierzeit verifiziert. – Sudoer
Die Abhängigkeiten werden BEHOBEN, wenn Sie das Bundle im OSGi-Container INSTALLIEREN. Da OSGi eine dynamische Umgebung ist, können Sie jederzeit ein Paket installieren ... Wenn das Paket den Status BEHOBEN erreicht, wird es möglicherweise STARTED. Mit anderen Worten, die Installation ist eine Art dynamisches Kompilieren ... wenn das Bundle das übergibt, ist garantiert, dass zum Zeitpunkt der Installation alle Importe erfüllt waren, so dass das Bundle gestartet werden kann. – Renato
Es gibt keine Möglichkeit, dass OSGi die Bundle-Abhängigkeiten auflösen kann, bevor Sie es tatsächlich installieren, da dies von den Bundles abhängt, die zum Zeitpunkt der Installation verfügbar sind.Maven hingegen verwendet das normale Java-Kompilierungsverfahren und ignoriert OSGi-Sichtbarkeitsregeln ... das ist der Hauptunterschied. – Renato