在开发 OSGi bundle 时,如果你的 Bundle 所依赖的某个 Jar 并不是一个 OSGi bundle(可以通过 MANIFEST.MF)文件看出来)。有一些解决方法:
- 将这个 Jar 包的 MANIFEST.MF 文件修改为符合 OSGi 规范的格式。这个工作可以手工做。(网上的使用 Eclipse 完成这个工作的方法我没有成功。成功者可告诉我方法)
- 将 Jar 包打入到你的 OSGi 包中。下面介绍使用 Felix 的 Maven Bundle plugin 去实现这个方法。
将下面的代码加入到你项目的 pom.xml 中。这样你所依赖的 Jar 将被打入到生产的 Bundle 的 Jar 包中。同时,原本 Import-Package 中的属于那些 Jar 包的 package 也会被移除。
<plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <configuration> <instructions> <Export-Package> xxx.xxx </Export-Package> <Private-Package> xxx.xxx </Private-Package> <Import-Package> * </Import-Package> <Embed-Dependency>maven_dependency_artifact_id_1,artifact_id_2,...</Embed-Dependency> </instructions> </configuration> </plugin>