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