OSGi包与普通.JAR文件使用之间的区别

时间:2013-11-28 05:54:31

标签: java jar osgi bundle

我最近开始研究OSGi。我读过,可以创建bundles (which are normal java classes) ,并通过dynamically installing/uninstalling任意捆绑包在另一个捆绑包中使用它们。

但我似乎无法理解任何java类中的正常.JAR文件使用与bundle的使用之间的区别。

任何人都可以帮我澄清一下吗? 谢谢。

1 个答案:

答案 0 :(得分:22)

基本上没有区别。 JAR是一个包,一个包是一个JAR,格式是相同的。但是,有用的包需要在其清单中包含OSGi元数据,以便OSGi框架可以管理包之间的类的可见性。没有这个元数据的JAR只包含不可见的类,看不到其他包中的任何类,也不能以任何方式启动它。 Import-Package清单标头告诉应该使哪些包对包可见,并且Export-Package定义包中应该对其他人可见的包。其他标题提供了其他功能。

使用传统的类路径,所有内容都是共享的和全局的,在类路径上具有相同类两次不会在任何地方标记,只会忽略一个。与OSGi的主要区别在于JAR现在都是私有的,在清单中添加元数据使其成为可以安全地与其他捆绑共享的捆绑。 OSGi确保提前检测到违规行为。