OSGi导入包问题

时间:2018-02-15 01:49:52

标签: java noclassdeffounderror osgi-bundle maven-bundle-plugin

我正在开发一个包含一些第三方依赖项的包。捆绑包是指来自该第三方的两个不同罐子的核心和连接功能。

然后我使用maven-bundle-plugin执行Import-Package我只能从任何jar中使用单个导入包而不是同时使用两个导入包(参考其他线程并且无法清楚地了解JAR导入)。或者它是第三方包装组织的问题?

  

JAR A - >包 - > com.test.pkg [包含class1,class2]   JAR B - >包 - > com.test.pkg [包含class3]

Import-package导入com.test.pkg,但我的应用程序需要class3,并且在运行期间,当引用class3时,我的容器会抛出ClassDefNotFoundException。我不确定我是否理解这个概念。

POM片段如下

<Import-Package>*,com.test.pkg</Import-Package>

有没有办法告诉我的OSGi容器从特定的JAR获取包。?

1 个答案:

答案 0 :(得分:0)

这称为&#39;拆分包&#39;这就是OSGi在多个包中复制包名称的不良做法。

有几种方法可以解决您的问题。最简单的方法是将两个第三方罐装入一个新罐子,然后从超级罐中导出你需要的东西。您可以将jar解压缩到源文件夹中,或将原始jar包含在lib文件夹中。然后包含一个可以导出所需内容的清单。

如果您只需要将OSGi客户端绑定到其中一个jar,则可以使用require-bundle而不是import-package 。这不是最好的设计,因为它会强制您指定包而不是包,但有时它是最佳选择。

最后,您可以使用split-package指令来更好地控制绑定过程。如果您不想使用更新的清单重新打包第三方jar,则必须创建一个片段包以指定那里的拆分包指令。