私人包裹的处理方式是啥?

Posted

技术标签:

【中文标题】私人包裹的处理方式是啥?【英文标题】:Whats the deal with private packages?私人包裹的处理方式是什么? 【发布时间】:2012-12-02 10:22:59 【问题描述】:

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

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

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

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

【问题讨论】:

你到底是在哪里遇到“包包”这个概念的?它在哪里配置?我相信它不是 manifest.mf 的一个特性。 也请参阅***.com/questions/13514123/… 【参考方案1】:

没有区别。

Export-Package 中未列出的任何包都是私有的.... 仅此而已。

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

未包含在“导出包”中的包不是私有的,它们是被禁止的。它们不能也不会用于其他捆绑包。另一方面,私有包必须包含在“导出包”中,但应该在众所周知的包中内部使用,并且编译器不鼓励使用它。如果您使用它们并在严格模式下运行 OSGi,它们将不可用,就好像它们没有被导出一样,您会得到 classNotFound 异常。 这对于纯 OSGi 是不正确的。 The OSGi core specification (R5) 明确指出(第 3.7.1 节):未导出或导入的包称为私有包。 @Behnil 的评论不准确。例如:“私有包必须包含在导出包中”显然是错误的,如果它们包含在导出中,那么它们就不是私有的!此外,OSGi 没有“严格模式”之类的东西。 好的,我发布的所有内容都是为了具体的 OSGi 实现 - Eclipse Equinox。所以我很抱歉造成混淆。 Equinox 中的私有包必须包含在导出的包中,因为这里的私有意味着内部。正如我在上面发布的那样,您所说的私人是在春分禁止的。至于严格模式,还有一些资料aniszczyk.org/2008/03/06/osgi-equinox-and-strict-mode @Benhil:您所指的概念不使用“私人”。正如其他人所说,OSGi 将术语定义为(包含的包 - 导出的包)。

以上是关于私人包裹的处理方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Apache Beam 处理“路由”的方式是啥

uCOS和FreeRTOS在临界区上处理的不同方式,不过本质上是一样的

在反应器内存储事件处理程序的最佳方式是啥

处理照片上传的最佳方式是啥?

以非编程方式处理 SQL Server 数据的最佳方式是啥?

React - 处理登录和身份验证的最佳方式是啥?