什么是私人包裹的交易?

Mir*_*rco 26 java osgi module

我一直在与OSGi合作一段时间,但我仍然不了解私有包.

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

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

我已经阅读了OSGi in Action和"OSGi和Apache Felix 3.0 - 初学者指南",但我无法找到差异.

Nei*_*ett 25

没有区别.

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

可能已经看到另一个标题Private-Package.这不是OSGi标头,OSGi框架完全忽略了它.如果你看到这一点,表明包已建成BNDMaven的捆绑插件,使用这种头有一个内置的时间指令.因此,它仅在构建时相关,并且在运行时无任何影响.


ben*_*min 17

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

如果您的清单是由maven-bundle-plugin生成的,那么这个术语会更加相关,因为maven bundle插件将默认导出所有包,除了例如一个名为internal(或其子包)的包.这是某种反向方法,因为您指定了私有包并计算了导出的包.有关详细信息,请参阅maven bundle插件.

  • @Behnil的评论不准确.例如:"私有包必须包含在export-package中"显然是错误的,如果它们包含在导出中,那么它们就不是私有的!而且,OSGi没有"严格模式"这样的东西. (3认同)
  • 未包含在"Export-package"中的软件包不是私有的,它们是被禁止的.它们不能也不会被其他捆绑包使用.另一方面,私有包必须包含在"Export-package"中,但是应该在众所周知的bundle中内部使用,并且它的使用主要是编译器不鼓励.如果您使用它们并在严格模式下运行OSGi,它们将无法使用,就好像它们未被导出并且您获得classNotFound异常. (2认同)
  • 纯OSGi不适用.[OSGi核心规范(R5)](http://www.osgi.org/Specifications/HomePage)明确指出(第3.7.1节):_未导出或导入的包被称为私有包._ (2认同)