28

我已经使用 OSGi 有一段时间了,但我仍然不了解私有包。

  • 导出的包是对其他捆绑包可见的包
  • 导入的包是由导出包的捆绑包导入的包。
  • 私有包是对其他捆绑包不可见的包(我不明白)

不是所有未导出的捆绑包对所有其他包都不可见吗?如果是这样,私有包和不导出的包有什么区别?

我已经阅读了 OSGi in Action 和“OSGi and Apache Felix 3.0 - Beginners Guide”,但我找不到区别。

4

2 回答 2

27

没有区别。

任何未列出的包Export-Package都是私有的......这就是它的全部内容。

可能已经看到另一个名为Private-Package. 这不是 OSGi 标头,它被 OSGi 框架完全忽略。如果您看到此信息,则表明已使用bndMaven Bundle Plugin构建了一个包,它使用此标头具有构建时指令。因此,它仅在构建时相关,在运行时没有任何影响。

于 2012-12-14T14:20:14.747 回答
21

是的,manifest.mf 条目中未定义的所有包Export-Package都是私有包。您不需要单独指定它们,它只是便于沟通的另一个术语。

如果你有你的清单,例如由 maven-bundle-plugin 生成,这个术语 get 更相关一些,因为 maven bundle 插件将默认导出所有包,除了一个名为的包internal(或它的子包)。这在某种程度上是相反的方法,因为您指定了私有包并计算了导出的包。有关详细信息,请参阅Maven 捆绑插件

于 2012-12-14T13:16:06.783 回答