【发布时间】:2013-12-14 01:16:08
【问题描述】:
我最近开始学习OSGi。我读到有人可以创建bundles(which are normal java classes) 并通过dynamically installing/uninstalling 任何捆绑包在另一个捆绑包中使用它们。
但我似乎无法理解在任何 java 类中正常使用 .JAR 文件和使用 bundle 之间的区别。
谁能帮我澄清一下? 谢谢你。
【问题讨论】:
我最近开始学习OSGi。我读到有人可以创建bundles(which are normal java classes) 并通过dynamically installing/uninstalling 任何捆绑包在另一个捆绑包中使用它们。
但我似乎无法理解在任何 java 类中正常使用 .JAR 文件和使用 bundle 之间的区别。
谁能帮我澄清一下? 谢谢你。
【问题讨论】:
基本没有区别。 JAR 是一个包,一个包是一个 JAR,格式是相同的。然而,有用 包需要在其清单中包含 OSGi 元数据,以便 OSGi 框架可以管理包之间类的可见性。没有此元数据的 JAR 将只包含不可见的类,看不到其他包中的任何类,也无法以任何方式启动。 Import-Package 清单标头说明哪些包应该对包可见,而 Export-Package 定义包中应该对其他人可见的包。其他标头提供附加功能。
使用传统的类路径,所有内容都是共享的和全局的,在类路径上出现两次相同的类不会在任何地方标记,只是忽略一次。与 OSGi 的主要区别在于 JAR 现在是私有的,在清单中添加元数据使其成为可以安全地与其他包共享的包。 OSGi 确保提前检测到违规行为。
【讨论】: