SpringDM笔记3-MAINFEST.NF文件:Header,Version配置
1. The configuration of a header follows the syntax illustrated in the following snippet:
??? Header-Name:
??? header-value1;directive1:=value1;directive2:=value2,
??? header-value2;directive1:="item1, item2, item3";attribute1=value4,
??? header-value3;directive1:=value1;directive3:=value3
??? ...
??? 例如:
??? Import-Package:
??? javax.xml.parsers;resolution:=optional,
??? net.sf.cglib.proxy;resolution:=optional,
??? org.apache.commons.logging,org.springframework.beans;resolution:=optionalversion=2.5.0,
??? org.springframework.beans.annotation;resolution:=optional;version=2.5.0,
??? ...
2. The main OSGi headers used in a bundle’s manifest file
??? Manifest-Version: 指定Mainfest.MF文件的版本
??? Bundle-MainfestVersion: OSGiR4,2;OSGi3,1
??? Bundle-sybbolicName:指定组件的唯一名字
??? Bundle-Name:指定易于阅读的名字
??? Bundle-Version:指定组件的版本(与Bundle-sybbolicName合起来使用)
??? Bundle-DocURL
??? Bundle-Category
??? Import-Package
??? Export-Package
??? DynamicImport-Package:动态的从其他Bundle中Import所有Package
??? Bundle-NativeCode
??? Require-Bundle:Import一个Bundle的所有ExportPackage
??? Bundle-Activator
??? Bundle-ClassPath
??? Fragment-Host: 将一个Fragment赋给一个主Bundle
3. SpringDM提供的Header
??? SpringExtender-Version: 针对主Bundle,给SpringExtender附一个目标版本
4. Virgo Web Server提供的Header
??? Library-Version:指定一个Library的版本
??? Library-SysbolicName: 一个Library的唯一名字与Library共同使用
??? Import-Bundle
??? Import-Library
??? Application-SymbolicName: PBWDP
??? Application-Version: 1.0.0.RELEASE
??? Application-Name: PBWDP PAR
?
??? Module-Type: Web
??? Web-ContextPath: PBWDP
??? Web-DispatcherServletUrlPatterns: APP
5. Import-Package与DynamicImport-Package的使用场景
??? 如果一个Bundle不能确定需要Package中的那些Class,则使用DynamicImport-Package;否则使用Imort-
??? Package.
??? DynamicImport-Package: 如果一个Bundle需要某些类时,而这些使用了Class.forName()进行加载,此时
??? 类之间的依赖关系很难被检测出来,此时使用该Header可以在解析依赖关系时自动从类路径中搜寻需要的类,
??? 从而确保依赖关系满足;一个Bundel使用该Header,在Bundle启动的过程中是不需要所依赖的Package能被
??? Resolved的,在该Bundle后期需要的时候再去临时动态Resolve;同时该Header支持(*),如:
??? DynamicImport-Package:com.apress.ch3.*
??? 这将能够同时导入com.apress.ch3下的所有类。
??? Import-Package: 需要Bundle在Resolve时所依赖的Package能被Resolve, 而且不支持通配符(*);同时这两
??? 个Header支持属性:resolution:=option, 当Bundle在Resolve时会试图解析依赖的Package.
??? 另外: DynamicImport-Package当一个类加载器试图加载该Header指定的Package时,每次将Wire一个
??? Package;而Import-Package有属性resolution:=option时,将在bundle resolve时只wire一次依赖的
??? Package.