OSGi 导入包问题
OSGi Import Package issues
我正在开发一个包含一些第三方依赖项的包。该捆绑包引用了来自该第三方的两个不同 jar 的核心和连接功能。
然后我用 maven-bundle-plugin 做 Import-Package 我只能从任何一个 jar 中使用一个导入包,而不是同时使用两个(引用其他线程并且无法清楚地理解JAR 导入)。还是第三方包组织的问题?
JAR A -> package -> com.test.pkg [contains class1, class2]
JAR B -> package -> com.test.pkg [contains class3]
Import-package 导入 com.test.pkg,但我的应用程序需要 class3,并且在 运行 期间我的容器在引用 class3 时抛出 ClassDefNotFoundException。不确定我是否理解错了这个概念。
POM 片段如下
<Import-Package>*,com.test.pkg</Import-Package>
有什么方法可以让我的 OSGi 容器从特定的 JAR 中获取包。?
这称为 'split package',这就是为什么在 OSGi 中在多个包中复制包名称是一种不好的做法。
有几种方法可以解决您的问题。最简单的方法是将两个第三方 jar 打包到一个新的 jar 中,然后从 uber-jar 中导出你需要的东西。您可以将 jar 解压到源文件夹中,或将原始 jar 包含在 lib 文件夹中。然后包括一个导出您需要的清单。
如果您只需要将 OSGi 客户端绑定到其中一个 jar,则可以使用 require-bundle 而不是 import-package。这不是最好的设计,因为它迫使您指定一个捆绑包而不是一个包,但有时它是最好的选择。
最后,您可以使用 split-package 指令来更好地控制绑定过程。如果您不想使用更新的清单重新打包 3rd 方 jar,则必须创建一个片段包以在其中指定拆分包指令。
我正在开发一个包含一些第三方依赖项的包。该捆绑包引用了来自该第三方的两个不同 jar 的核心和连接功能。
然后我用 maven-bundle-plugin 做 Import-Package 我只能从任何一个 jar 中使用一个导入包,而不是同时使用两个(引用其他线程并且无法清楚地理解JAR 导入)。还是第三方包组织的问题?
JAR A -> package -> com.test.pkg [contains class1, class2] JAR B -> package -> com.test.pkg [contains class3]
Import-package 导入 com.test.pkg,但我的应用程序需要 class3,并且在 运行 期间我的容器在引用 class3 时抛出 ClassDefNotFoundException。不确定我是否理解错了这个概念。
POM 片段如下
<Import-Package>*,com.test.pkg</Import-Package>
有什么方法可以让我的 OSGi 容器从特定的 JAR 中获取包。?
这称为 'split package',这就是为什么在 OSGi 中在多个包中复制包名称是一种不好的做法。
有几种方法可以解决您的问题。最简单的方法是将两个第三方 jar 打包到一个新的 jar 中,然后从 uber-jar 中导出你需要的东西。您可以将 jar 解压到源文件夹中,或将原始 jar 包含在 lib 文件夹中。然后包括一个导出您需要的清单。
如果您只需要将 OSGi 客户端绑定到其中一个 jar,则可以使用 require-bundle 而不是 import-package。这不是最好的设计,因为它迫使您指定一个捆绑包而不是一个包,但有时它是最好的选择。
最后,您可以使用 split-package 指令来更好地控制绑定过程。如果您不想使用更新的清单重新打包 3rd 方 jar,则必须创建一个片段包以在其中指定拆分包指令。