Perform a quick check to ensure that all of the required bundles and features are actually installed in the OSGi container. You can use
osgi:list to check which bundles are installed and
features:list to check which features are installed.
Install (but do not start) your bundle, using the
osgi:install console command. For example:
JBossFuse:karaf@root> osgi:install MyBundleURL
dev:dynamic-import console command to enable dynamic imports on the bundle you just installed. For example, if the bundle ID of your bundle is 218, you would enable dynamic imports on this bundle by entering the following command:
JBossFuse:karaf@root> dev:dynamic-import 218
This setting allows OSGi to resolve dependencies using any of the bundles already installed in the container, effectively bypassing the usual dependency resolution mechanism (based on the
Import-Package header). This is not recommemded for normal deployment, because it bypasses version checks: you could easily pick up the wrong version of a package, causing your application to malfunction.
You should now be able to resolve your bundle. For example, if your bundle ID is 218, enter the followng console command:
JBossFuse:karaf@root> osgi:resolve 218
Assuming your bundle is now resolved (check the bundle status using
osgi:list), you can get a complete list of all the packages wired to your bundle using the
package:imports command. For example, if your bundle ID is 218, enter the following console command:
JBossFuse:karaf@root> package:imports 218
You should see a list of dependent packages in the console window (where the package names are highlighted in this example):
Spring Beans (67): org.springframework.beans.factory.xml; version=3.0.5.RELEASE
Web Services Metadata 2.0 (104): javax.jws; version=2.0.0
Apache CXF Bundle Jar (125): org.apache.cxf.helpers; version=2.4.2.fuse-00-08
Apache CXF Bundle Jar (125): org.apache.cxf.transport.jms.wsdl11; version=2.4.2.fuse-00-08
Unpack your bundle JAR file and look at the packages listed under the
Import-Package header in the
META-INF/MANIFEST.MF file. Compare this list with the list of packages found in the previous step. Now, compile a list of the packages that are missing from the manifest's
Import-Package header and add these package names to the
Import-Package element of the Maven bundle plug-in configuration in your project's POM file.
To cancel the dynamic import option, you must uninstall the old bundle from the OSGi container. For example, if your bundle ID is 218, enter the following command:
JBossFuse:karaf@root> osgi:uninstall 218
You can now rebuild your bundle with the updated list of imported packages and test it in the OSGi container.