我正在开发一个包含一些第三方依赖项的包。捆绑包是指来自该第三方的两个不同罐子的核心和连接功能。
然后我使用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获取包。?
答案 0 :(得分:0)
这称为&#39;拆分包&#39;这就是OSGi在多个包中复制包名称的不良做法。
有几种方法可以解决您的问题。最简单的方法是将两个第三方罐装入一个新罐子,然后从超级罐中导出你需要的东西。您可以将jar解压缩到源文件夹中,或将原始jar包含在lib文件夹中。然后包含一个可以导出所需内容的清单。
如果您只需要将OSGi客户端绑定到其中一个jar,则可以使用require-bundle而不是import-package 。这不是最好的设计,因为它会强制您指定包而不是包,但有时它是最佳选择。
最后,您可以使用split-package指令来更好地控制绑定过程。如果您不想使用更新的清单重新打包第三方jar,则必须创建一个片段包以指定那里的拆分包指令。