*MF概述

      MANIFEST.MF文件(以下简称MF), 记录jar文件的元信息, 它的文件格式类似properties文件的key-value.同时, OSGi对MF的属性进行了扩展, 这些扩展信息提供给OSGi框架处理, 这样一个普通的jar就成为一个OSGi管理下的bundle.

      此文的目的, 是介绍MF文件的语法格式, 和一些OSGi下的特殊表示(如属性的指令).

 

*MF语法说明

---标准MF和OSGi扩展MF

1)标准MF格式, Property-Name: value

提醒: 属性名后的冒号和属性值之间, 留有一个空格.

2)OSGi的MF格式, Property-Name: clause(, clause)*

clause ::= target(;parameter)*(,target2(;parameter)*)*

parameter ::= attribute=value | directive:=value

说明如下:

这里的target表示Property-Name对应的值, 语法上target之间用逗号分割, target内部参数用分号分割;每一个target可能会有一些相关的参数,

这些参数有两种表示格式, 一种称为属性(attribute), 一种称为指令(derective);

attribute表示的含义是一般的key/value表示, 如Export-Package: org.osgi.framework.hooks.service;uses:="org.osgi.frame

work";version="1.0"中的version就是'org.osgi.framework.hooks.service'这个target的一个属性. 需要注意的是属性的value加上引号, 否则value中有空格等情况会解析错误.

而directive是和osgi处理相关的信息, 如Bundle-SymbolicName: osgi.core;singleton:=true中的'singleton:=true'就表示'osgi.core'的一个指令.

3)OSGi的MF简写格式, 用于简化不同target有相同参数的情况, 格式如下:  clause ::= target;(target;)*parameter(;parameter)*

说明, 多个target可以写在一起, 之间用分号隔离, 这样子后面的参数就是这些target共享的.

 

*注意事项

---属性名规范:

不区分大小写;

name可以是字母,数字,下划线('_'),连字符('-');

---单行不能超过72个字符; 超过时另起一行并必须以一个空格开始, 表示和上一行连接在一起;

 

*示例, '#'后内容是注释说明, 用于说明前面的内容, MF没有注释语法

Manifest-Version: 1.0     #'1.0'之前一定需要一个空格
Created-By: 1.5.0_11 (Sun Microsystems Inc.)
Bundle-License: http://opensource.org/licenses/apache2.0.php; link="ht
 tp://www.apache.org/licenses/LICENSE-2.0"; description="Apache Licens
 e, Version 2.0"
Import-Package: javax.security.auth
Bnd-LastModified: 1251758748937
Export-Package: org.osgi.framework.hooks.service;uses:="org.osgi.frame  #'uses:'是osgi相关指令, 解决bundle依赖一致性问题
 work";version="1.0",org.osgi.framework;uses:="javax.security.auth.x50
 0";version="1.5",org.osgi.framework.launch;uses:="org.osgi.framework"
 ;version="1.0",org.osgi.service.condpermadmin;uses:="org.osgi.framewo
 rk,org.osgi.service.permissionadmin";version="1.1",org.osgi.service.p  #'version'是osgi相关参数
 ackageadmin;uses:="org.osgi.framework";version="1.2",org.osgi.service
 .permissionadmin;version="1.2",org.osgi.service.startlevel;uses:="org
 .osgi.framework";version="1.1",org.osgi.service.url;version="1.0"
Bundle-Version: 4.2.0.200908310645
Bundle-Copyright: Copyright (c) OSGi Alliance (2000, 2009). All Rights
  Reserved.
Bundle-Name: osgi.core
Bundle-Description: OSGi Service Platform Release 4 Version 4.2, Core 
 Interfaces and Classes for use in compiling bundles.
Bundle-Vendor: OSGi Alliance
Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.osgi.core;singleton:=true
Tool: Bnd-0.0.356
DynamicImport-Package: *
Bundle-RequiredExecutionEnvironment: J2SE-1.5,
 JavaSE-1.6  #换行必须以一个空格开始, 之后的内容连接至上一行  
Bundle-ActivationPolicy: lazy

  

posted on 2012-09-12 15:39  戴忠  阅读(3296)  评论(0编辑  收藏  举报