*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