问题
I am very new to the OSGi platform.
Having an OSGi bundle B1
that has a dependency to another bundle B2
, which is very probably not provided by the container, can I package both bundles in the same jar
?
If yes: howto do that? what would happen if the jar
is installed and the bundle is already installed?
回答1:
Yes you can do this... kind of.
Normally OSGi bundles are JAR files because they need to have a META-INF/MANIFEST.MF. The OSGi framework cannot directly read your "multi-bundle" JAR.
However, installing bundles in OSGi involves calling the BundleContext.installBundle
method. This method has two flavours, one of them takes an InputStream as a parameter; this InputStream should supply the content of the OSGi bundle. Therefore you can take your big JAR and read it with a JarInputStream, passing the individual entries to the installBundle
method.
回答2:
Although OSGi doesn't directly support multiple bundles in the same jar, there is a standard for multiple bundles in the same archive, which solves the distribution problem you're trying to address. Unfortunately, it may introduce an extra problem in your scenario, because it's part of enterprise OSGi, rather than core OSGi, so it wouldn't be part of a bare bones Equinox or Felix framework. If you have more control over the starting platform your users are using, it may do what you need.
The basic idea is that you package all your bundles into a zip with a .esa extension, along with a simple manifest. You can then distribute the esa file. This tutorial includes lots more detail: http://coderthoughts.blogspot.co.uk/2013/04/osgi-subsystems.html?m=1
来源:https://stackoverflow.com/questions/20148375/packing-multiple-osgi-bundles-in-the-same-jar