校验Bundle有效性

要确定某个JAR包是否是一个合法的OSGi Bundle,首先要根据其元数据信息中的Bundle-ManifestVersion(注意,不是 ManifestVersion,ManifestVersion是JAR文件规范中定义的)来确定元数据信息的版本号。如果在元数据信息中没有指定 Bundle-ManifestVersion,那么其默认属性是1,表示遵循OSGi R3规范;如果Bundle-ManifestVersion为2,则代表遵循OSGi R4/R5规范;OSGi R4规范中添加了一些特定的标记。在将Bundle安装到OSGi系统的时候,必须对其进行有效性校验。下面列举一些(不完全包括)会导致Bundle有 效性校验失败的问题。

  • 无法根据Bundle-RequireExecutionEnvironment的值找到一个可匹配执行环境。
  • 在Bundle中没有设置Bundle-SymbolicName标记。
  • 存在重复的标记。
  • 对某个Package重复导入。
  • Bundle导入或导出了以java.*开头的Package。
  • 在Export-Package标记中用mandatory参数指明了某些强制属性,却没有定义这些属性。
  • 尝试安装某个和OSGi框架中某个已经安装好的Bundle具有同样名称和版本的Bundle。
  • 将某个Bundle更新为和OSGi框架中一个已经安装好的Bundle具有同样名称和版本的Bundle。
  • 元数据信息中存在语法错误(例如,不合法的版本格式或Bundle名称)。
  • 同时使用Specification-version和version参数,但是为它们指定了不一样的值,例如:

    Import-Package p;specification-version=1;version=2

    这将导致一个错误。而下面的指定:

    Import-Package p;specification-version=1, q;version=2

    不会导致错误。

  • 在元数据信息中列出了权限文件:OSGI-INF/permission.perm,但此文件不存在。

  • Bundle-ManifestVersion的值不等于1或2,在今后的OSGi规范中另有规定的情况除外。

转载于:https://my.oschina.net/luyaolove/blog/736215

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值