Java 私人包裹怎么办?

Java 私人包裹怎么办?,java,module,osgi,Java,Module,Osgi,我已经使用OSGi一段时间了,但是我仍然不了解一些关于私有包的内容 导出的包是其他包可见的包 导入的包是由导出包的捆绑包导入的包 私有包是其他包不可见的包(我不明白这一点) 不是所有未导出的捆绑包对所有其他包都不可见吗?如果是,私有包和未导出的包有什么区别 我已经阅读了OSGi in Action和“OSGi和Apache Felix 3.0-初学者指南”,但我没有找到区别。是的,manifest.mf条目导出包中未定义的所有包都是私有包。您不需要单独指定它们,这只是方便沟通的另一个术语 如

我已经使用OSGi一段时间了,但是我仍然不了解一些关于私有包的内容

  • 导出的包是其他包可见的包
  • 导入的包是由导出包的捆绑包导入的包
  • 私有包是其他包不可见的包(我不明白这一点)
不是所有未导出的捆绑包对所有其他包都不可见吗?如果是,私有包和未导出的包有什么区别


我已经阅读了OSGi in Action和“OSGi和Apache Felix 3.0-初学者指南”,但我没有找到区别。

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


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

没有区别。

导出包中未列出的任何包都是私有的。。。。就这些


您可能已经看到另一个标题名为
Private Package
。这不是OSGi头,OSGi框架完全忽略了它。如果您看到这一点,则表示已使用或构建了捆绑包,使用此标头的具有构建时指令。因此,它只在构建时相关,在运行时没有任何影响。

您在哪里遇到了“私有包”的概念?它在哪里配置?我相信这不是manifest.mf的一个特性。请注意,不包括在“出口包装”中的包装不是私人的,它们是被禁止的。其他捆绑包不能也不会使用它们。另一方面,私有包必须包含在“导出包”中,但应该在众所周知的包中内部使用,编译器通常不鼓励使用它。如果您使用它们并在严格模式下运行OSGi,它们将不可用,就好像它们没有被导出一样,并且您会得到classNotFound异常。这对于纯OSGi是不正确的。明确说明(第3.7.1节):未导出或导入的包称为私有包。@Behnil的评论不准确。例如:“私有包必须包含在出口包中”显然是错误的,如果它们包含在出口中,那么它们就不是私有的!另外,OSGi没有“严格模式”之类的东西。好的,我发布的所有内容都是为了具体实现OSGi实现——EclipseEquinox。所以我很抱歉让你困惑。equinox中的私有包必须包含在导出包中,因为私有在这里表示内部。正如我在上面所说,你所说的“私人”是指在春分时被禁止的。至于严格模式,还有一些更多的信息@Benhil:您提到的概念没有使用“private”。另一种说法是,OSGi将术语定义为(包含的包和导出的包)。