我已经使用 OSGi 有一段时间了,但我仍然不了解私有包。
- 导出的包是对其他捆绑包可见的包
- 导入的包是由导出包的捆绑包导入的包。
- 私有包是对其他捆绑包不可见的包(我不明白)
不是所有未导出的捆绑包对所有其他包都不可见吗?如果是这样,私有包和不导出的包有什么区别?
我已经阅读了 OSGi in Action 和“OSGi and Apache Felix 3.0 - Beginners Guide”,但我找不到区别。
没有区别。
任何未列出的包Export-Package
都是私有的......这就是它的全部内容。
您可能已经看到另一个名为Private-Package
. 这不是 OSGi 标头,它被 OSGi 框架完全忽略。如果您看到此信息,则表明已使用bnd或Maven Bundle Plugin构建了一个包,它使用此标头具有构建时指令。因此,它仅在构建时相关,在运行时没有任何影响。
是的,manifest.mf 条目中未定义的所有包Export-Package
都是私有包。您不需要单独指定它们,它只是便于沟通的另一个术语。
如果你有你的清单,例如由 maven-bundle-plugin 生成,这个术语 get 更相关一些,因为 maven bundle 插件将默认导出所有包,除了一个名为的包internal
(或它的子包)。这在某种程度上是相反的方法,因为您指定了私有包并计算了导出的包。有关详细信息,请参阅Maven 捆绑插件。