1

我正在使用 maven (maven-bundle-plugin) 和 apache karaf 进行 osgi bundle 开发的第一步。我的问题是:如何导入另一个捆绑包的包?

如果我有两个捆绑包 A 和 B。假设捆绑包 A 导出一个包“package.from.bundle.A”。我可以在 Bundle A Project 的 pom.xml 中声明:

 ...
<instructions>
 ...
  <Export-Package>
    package.from.bundle.A*;version=${project.version}
  </Export-Package>
  <Import-Package>
       *
  </Import-Package>
</instructions>
...

但是我如何声明我想在 Bundle B 中使用该包?如果我只是在项目 B 的 pom 文件的 import-package 标记之间写包名,这不起作用...

 ...
<instructions>
 ...
  <Export-Package>
  </Export-Package>
  <Import-Package>
       package.from.bundle.A
  </Import-Package>
</instructions>
...

maven 如何知道这个包与哪个捆绑项目相关?如何使用 maven 在我的包之间使用依赖项?

谢谢你

4

2 回答 2

1

maven bundle 插件在幕后使用 bnd,它使用字节码分析从编译的代码中追溯地计算导入。包导出更多地是一种设计,这就是为什么需要明确指定它们的原因。

您可以查看目标文件夹中生成的清单,我建议您确保了解代表您所做的工作。

于 2012-07-14T01:13:39.543 回答
1

您必须将 maven 依赖项设置为您需要的所有包。这对于 maven 中的编译步骤是必要的。maven bundle plugin 或 bnd 会分析构建结果。它会自动检测您提供的所有包并导出它们,除非它们中有一些名称,例如 impl。它还检测您导入的所有包并为它们创建 Import-Package 语句。因此,在大多数情况下,您不必配置导入和导出。因此,只需将它们留空并检查罐子中的清单。仅当它不正确时,您必须手动配置。如果您配置其他导入,请不要忘记添加 ,*。如果您忘记了这一点,则不会添加自动检测到的包,您必须手动指定所有您通常不想要的包。

于 2012-07-14T18:51:56.927 回答