Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OSGI - handling 3rd party JARs required by a bundle

Tags:

java

jar

osgi

I'm just getting started with OSGI development and am struggling to understand how best to handle dependant JARs.

i.e. if I'm creating a bundle the likelyhood is that I will need to use a few 3rd party JARs. When I create my bundle JAR to deploy to OSGI, obviously these 3rd party JARs are not included and thus the bundle will not run.

I understand that one option is to turn these JARs into bundles and also deploy them to the OSGI container. However if they only need to be used by the one bundle this doesn't seem ideal.

What is the best solution to this? Can the JARs be embedded within the bundle JAR and if so is this a reasonable approach?

like image 662
William Avatar asked Aug 27 '09 11:08

William


People also ask

What is difference between JAR and OSGi bundle?

The key difference with OSGi is that a JAR is now all private, adding metadata in the manifest makes it a bundle that can safely share with other bundles. OSGi makes sure violations are detected ahead of time.

What is an OSGi bundle?

In OSGi, a single component is called a bundle. Logically, a bundle is a piece of functionality that has an independent lifecycle – which means it can be started, stopped and removed independently. Technically, a bundle is just a jar file with a MANIFEST. MF file containing some OSGi-specific headers.

What is true about OSGi bundles?

OSGi bundles allow versioning of code Two different applications might have different version requirements on the same library. OSGi allows both versions to be deployed simultaneously, and both applications can be satisfied.


1 Answers

You can include a third party jar inside your bundle by adding the third party jar to the root directory of the bundle jar file and then adding a bundle classpath header to the bundle's manifest, e.g.:

Bundle-ClassPath: .,my3rdparty.jar 

If you want to place third party jar to subdirectory, specify the path without using heading ./, e.g

Bundle-ClassPath: .,lib/my3rdparty.jar # (not ./lib/my3rdparty.jar) 
like image 176
William Avatar answered Oct 02 '22 13:10

William