如何测试jar是否是OSGi jar?

时间:2013-10-18 17:19:24

标签: osgi

也许这是一个愚蠢的问题,但是测试Java Archive(jar)文件是否是OSGi包的最佳方法是什么?也就是说,jar完全兼容的最低要求是什么?是仅仅存在META-INF / MANIFEST.MF(我不这么认为)?如果没有,该文件必须提供的最小字段是什么?

实际上,我应该如何测试jar是否是OSGi jar?

2 个答案:

答案 0 :(得分:13)

在MANIFEST.MF中查找Bundle-SymbolicName标头。这是OSGi包中唯一的必需标头,至少从OSGi规范的4.0版本开始。因此,如果定义了Bundle-SymbolicName标头,则JAR是OSGi包。如果没有,那么它只是一个JAR。

答案 1 :(得分:1)

  
    

bundle是一组Java类和其他资源,在其所有内容上配备了详细的清单MANIFEST.MF文件,以及为包含的Java类组提供更复杂的行为所需的其他服务,达到认为整个聚合是一个组成部分。

  

  
    

OSGi规范将捆绑包描述为“模块化单元”,“它由Java类和其他资源组成,它们共同为最终用户提供功能。”。

         

bundle是一个JAR文件:

   Contains [...] resources
   Contains a manifest file describing the contents of the JAR file and providing information about the bundle
   Can contain optional documentation in the OSGI-OPT directory of the JAR file or one of its sub-directories
         

简而言之,bundle = jar + OSGI信息(在JAR清单文件中指定 - META-INF / MANIFEST.MF),不需要额外的文件或预定义的文件夹布局。

  

我想唯一需要的资格是有一组类,它包含一个包含有效OSGi头的MANIFEST.MF文件。

考虑这个link
以及this

回答你的问题,测试捆绑包的唯一方法是检查MANIFEST.MF文件是否存在并包含有效的标题。