Es gibt im Grunde keinen Unterschied. Ein JAR ist ein Bündel und ein Bündel ist ein JAR, die Formate sind identisch. Ein nützliches Bundle erfordert jedoch OSGi-Metadaten in seinem Manifest, sodass ein OSGi-Framework die Sichtbarkeit von Klassen zwischen Bündeln verwalten kann. Eine JAR ohne diese Metadaten würde nur unsichtbare Klassen enthalten, könnte keine Klassen von anderen Bundles sehen, noch könnte sie in irgendeiner Weise gestartet werden. Der Manifest-Header Import-Package gibt an, welche Pakete für das Bundle sichtbar gemacht werden sollen, und das Export-Package definiert die Pakete im Bundle, die für andere sichtbar gemacht werden sollen. Andere Header bieten zusätzliche Funktionen.
Mit dem traditionellen Klassenpfad ist alles gemeinsam und global, wobei die gleiche Klasse auf dem Klassenpfad zweimal nicht markiert ist, man wird einfach ignoriert. Der Hauptunterschied zu OSGi besteht darin, dass eine JAR-Datei jetzt nur noch privat ist. Durch das Hinzufügen von Metadaten im Manifest wird es zu einem Bundle, das sicher mit anderen Bundles geteilt werden kann. OSGi stellt sicher, dass Verstöße im Voraus erkannt werden.
Löschen. Danke :) – Amrit
Kann also ein Bündel anstelle eines Jar in einer JavaEE-Anwendung verwendet werden? – adbdkb
Ja, es ist eine normale JAR. In einer JavaEE-App fungiert sie jedoch als JAR und nicht als Paket. –