Chapter 11. Deploying a Plain JAR
An alternative method of deploying applications into Apache Karaf is to use plain JAR files. These are usually libraries that contain no deployment metadata. A plain JAR is neither a WAR, nor an OSGi bundle.
If the plain JAR occurs as a dependency of a bundle, you must add bundle headers to the JAR. If the JAR exposes a public API, typically the best solution is to convert the existing JAR into a bundle, enabling the JAR to be shared with other bundles. Use the instructions in this chapter to perform the conversion process automatically, using the open source Bnd tool.
For more information on the Bnd tool, see Bnd tools website.
11.1. Converting a JAR Using the wrap Scheme
You have the option of converting a JAR into a bundle using the
wrap: protocol, which can be used with any existing URL format. The
wrap: protocol is based on the Bnd utility.
wrap: protocol has the following basic syntax:
wrap: protocol can prefix any URL that locates a JAR. The locating part of the URL, LocationURL, is used to obtain the plain JAR and the URL handler for the
wrap: protocol then converts the JAR automatically into a bundle.
wrap: protocol also supports a more elaborate syntax, which enables you to customize the conversion by specifying a Bnd properties file or by specifying individual Bnd properties in the URL. Typically, however, the
wrap: protocol is used just with the default settings.
wrap: protocol is based on the Bnd utility, so it uses exactly the same default properties to generate the bundle as Bnd does.
Wrap and install
The following example shows how you can use a single console command to download the plain
commons-logging JAR from a remote Maven repository, dynamically convert it into an OSGi bundle, and then install it and start it in the OSGi container:
karaf@root> bundle:install -s wrap:mvn:commons-logging/commons-logging/1.1.1
wrap: protocol is provided by the Pax project, which is the umbrella project for a variety of open source OSGi utilities. For full documentation on the
wrap: protocol, see the Wrap Protocol reference page.