我最近开始研究OSGi
。我读过,可以创建bundles
(which are normal java classes)
,并通过dynamically installing/uninstalling
任意捆绑包在另一个捆绑包中使用它们。
但我似乎无法理解任何java类中的正常.JAR
文件使用与bundle
的使用之间的区别。
任何人都可以帮我澄清一下吗? 谢谢。
答案 0 :(得分:22)
基本上没有区别。 JAR是一个包,一个包是一个JAR,格式是相同的。但是,有用的包需要在其清单中包含OSGi元数据,以便OSGi框架可以管理包之间的类的可见性。没有这个元数据的JAR只包含不可见的类,看不到其他包中的任何类,也不能以任何方式启动它。 Import-Package清单标头告诉应该使哪些包对包可见,并且Export-Package定义包中应该对其他人可见的包。其他标题提供了其他功能。
使用传统的类路径,所有内容都是共享的和全局的,在类路径上具有相同类两次不会在任何地方标记,只会忽略一个。与OSGi的主要区别在于JAR现在都是私有的,在清单中添加元数据使其成为可以安全地与其他捆绑共享的捆绑。 OSGi确保提前检测到违规行为。