Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OSGi捆绑包和正常.JAR文件使用之间的差异_Java_Jar_Osgi_Bundle - Fatal编程技术网

Java OSGi捆绑包和正常.JAR文件使用之间的差异

Java OSGi捆绑包和正常.JAR文件使用之间的差异,java,jar,osgi,bundle,Java,Jar,Osgi,Bundle,我最近开始学习OSGi。我了解到,可以创建捆绑包(这是普通的java类),并通过动态安装/卸载任何捆绑包,在另一个捆绑包中使用它们 但我似乎无法理解任何java类中正常的.JAR文件使用与捆绑包的使用之间的区别 有人能帮我澄清一下吗? 多谢各位 基本上没有区别。JAR是一个bundle,bundle是一个JAR,格式是相同的。但是,一个有用的bundle需要在其清单中包含OSGi元数据,以便OSGi框架能够管理bundle之间类的可见性。没有此元数据的JAR将只包含不可见的类,无法从其他捆绑包中

我最近开始学习OSGi。我了解到,可以创建
捆绑包
(这是普通的java类)
,并通过
动态安装/卸载任何捆绑包,在另一个捆绑包中使用它们

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

有人能帮我澄清一下吗?
多谢各位

基本上没有区别。JAR是一个bundle,bundle是一个JAR,格式是相同的。但是,一个有用的bundle需要在其清单中包含OSGi元数据,以便OSGi框架能够管理bundle之间类的可见性。没有此元数据的JAR将只包含不可见的类,无法从其他捆绑包中看到任何类,也无法以任何方式启动。导入包清单头告诉包中哪些包应该对包可见,而导出包定义包中其他人应该对包可见的包。其他标题提供了附加功能


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

那么,在JavaEE应用程序中可以使用捆绑包代替jar吗?是的,它是一个普通的jar。然而,在JavaEE应用程序中,它当然会充当JAR而不是捆绑包。