jar包中的MANIFEST.MF文件解析
2012-12-15 15:23
591 查看
在java的jar文件中,经常可以看到包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息。
Jar文件的目录结构如下:
下面详细介绍MANIFEST.MF文件的内容,先来看zookeeper-3.3.1.jar中包含的MANIFEST.MF文件内容:
如果我们把MANIFEST中的配置信息进行分类,可以归纳出下面几个大类:
(2) Created-By:声明该文件的生成者,一般该属性是由jar命令行工具生成的,例如:Created-By: 16.3-b01 (SunMicrosystems Inc.)。
(3)Signature-Version:定义jar文件的签名版本
(4) Class-Path:应用程序或者类装载器使用该值来构建内部的类搜索路径。
(2)Implementation-Version 定义扩展实现的版本
(3)Implementation-Vendor 定义扩展实现的组织
(4)Implementation-Vendor-Id 定义扩展实现的组织的标识
(5)Implementation-URL : 定义该扩展包的下载地址(URL)
(6)Specification-Title 定义扩展规范的标题
(7)Specification-Version 定义扩展规范的版本
(8)Specification-Vendor 声明了维护该规范的组织
(9)Sealed 定义jar文件是否封存,值可以是true或者false
Name:javax/mail/Address.class
Digest-Algorithms: SHAMD5
SHA-Digest:AjR7RqnN//cdYGouxbd06mSVfI4=
MD5-Digest:ZnTIQ2aQAtSNIOWXI1pQpw==
这段内容定义类签名的类名、计算摘要的算法名以及对应的摘要内容(使用BASE64方法进行编码)
MicroEdition-Configuration:CLDC-1.0
MIDlet-Name: J2ME_MOBBERMidlet Suite
MIDlet-Info-URL: http://www.javayou.com/
MIDlet-Icon: /icon.png
MIDlet-Vendor: MidletSuite Vendor
MIDlet-1: mobber,/icon.png,mobber
MIDlet-Version: 1.0.0
MicroEdition-Profile:MIDP-1.0
MIDlet-Description:Communicator
关键在于我们怎么来读取这些信息呢?其实很简单,JDK给我们提供了用于处理这些信息的API,详细的信息请见java.util.jar包中,我们可以通过给JarFile传递一个jar文件的路径,然后调用JarFile的getManifest方法来获取Manifest信息。
Class-Path中是程序所引用到的一些资源文件的路径,默认是以“.”号开头,表示当前路径,如果要引用当前目录下一个子目录中的jar包,使用以下格式 :
子目录/xxx.jar 子目录/yyy.jar
多个jar的引用之间用空格隔开,路径的分隔符都是“/”。
要注意的是,MF文件中的每一行所能允许的最大字符个数是72个,如果超过72个,则需要换行继续写,此时新的一行需要用空格开头,表示是上一行的续行。并且,整个文件的最后必须是以回车换行结束。
Jar文件的目录结构如下:
下面详细介绍MANIFEST.MF文件的内容,先来看zookeeper-3.3.1.jar中包含的MANIFEST.MF文件内容:
Manifest-Version: 1.0 Ant-Version: Apache Ant 1.7.1 Created-By: 16.3-b01 (Sun Microsystems Inc.) Main-Class: org.apache.zookeeper.server.quorum.QuorumPeer Built-By: phunt Built-At: 05/07/2010 17:14 GMT Built-On: valhalla Implementation-Title: org.apache.zookeeper Implementation-Version: 3.3.1-942149 Implementation-Vendor: The Apache SoftwareFoundation Bundle-Vendor: The Apache Software Foundation Bundle-Name: ZooKeeper Bundle Bundle-SymbolicName:org.apache.hadoop.zookeeper Bundle-ManifestVersion: 2 Bundle-Version: 3.3.1 Bundle-License:http://www.apache.org/licenses/LICENSE-2.0.txt Bundle-DocURL: http://hadoop.apache.org/zookeeper Import-Package:javax.management,org.apache.log4j,org.osgi.framework;v ersion="[1.4,2.0)",org.osgi.util.tracker;version="[1.1,2.0)" Export-Package:org.apache.zookeeper;version="3.3.1",org.apache.zookee per.data;version="3.3.1",org.apache.zookeeper.version;version="3.3.1" ,org.apache.zookeeper.server;version="3.3.1",org.apache.zookeeper.ser ver.quorum;version="3.3.1"
如果我们把MANIFEST中的配置信息进行分类,可以归纳出下面几个大类:
1 一般属性
(1)Manifest-Version:用来定义manifest文件的版本,例如:Manifest-Version: 1.0,通常刚创建的时候都是这个版本号。(2) Created-By:声明该文件的生成者,一般该属性是由jar命令行工具生成的,例如:Created-By: 16.3-b01 (SunMicrosystems Inc.)。
(3)Signature-Version:定义jar文件的签名版本
(4) Class-Path:应用程序或者类装载器使用该值来构建内部的类搜索路径。
2 应用程序相关属性
Main-Class:定义jar文件的入口类,该类必须是一个可执行的类,一旦定义了该属性即可通过 java -jarx.jar来运行该jar文件。例如:Main-Class:org.apache.zookeeper.server.quorum.QuorumPeer3 包扩展属性
(1)Implementation-Title 定义了扩展实现的标题(2)Implementation-Version 定义扩展实现的版本
(3)Implementation-Vendor 定义扩展实现的组织
(4)Implementation-Vendor-Id 定义扩展实现的组织的标识
(5)Implementation-URL : 定义该扩展包的下载地址(URL)
(6)Specification-Title 定义扩展规范的标题
(7)Specification-Version 定义扩展规范的版本
(8)Specification-Vendor 声明了维护该规范的组织
(9)Sealed 定义jar文件是否封存,值可以是true或者false
4 签名相关属性
签名方面的属性我们可以来参照JavaMail所提供的mail.jar中的一段Name:javax/mail/Address.class
Digest-Algorithms: SHAMD5
SHA-Digest:AjR7RqnN//cdYGouxbd06mSVfI4=
MD5-Digest:ZnTIQ2aQAtSNIOWXI1pQpw==
这段内容定义类签名的类名、计算摘要的算法名以及对应的摘要内容(使用BASE64方法进行编码)
5 自定义属性
除了前面提到的一些属性外,你也可以在MANIFEST.MF中增加自己的属性以及响应的值,例如J2ME程序jar包中就可能包含着如下信息MicroEdition-Configuration:CLDC-1.0
MIDlet-Name: J2ME_MOBBERMidlet Suite
MIDlet-Info-URL: http://www.javayou.com/
MIDlet-Icon: /icon.png
MIDlet-Vendor: MidletSuite Vendor
MIDlet-1: mobber,/icon.png,mobber
MIDlet-Version: 1.0.0
MicroEdition-Profile:MIDP-1.0
MIDlet-Description:Communicator
关键在于我们怎么来读取这些信息呢?其实很简单,JDK给我们提供了用于处理这些信息的API,详细的信息请见java.util.jar包中,我们可以通过给JarFile传递一个jar文件的路径,然后调用JarFile的getManifest方法来获取Manifest信息。
6 常见设置
目前,MF文件中常用的设置只有三项:Manifest-Version、Class-Path、Main-Class。Class-Path中是程序所引用到的一些资源文件的路径,默认是以“.”号开头,表示当前路径,如果要引用当前目录下一个子目录中的jar包,使用以下格式 :
子目录/xxx.jar 子目录/yyy.jar
多个jar的引用之间用空格隔开,路径的分隔符都是“/”。
要注意的是,MF文件中的每一行所能允许的最大字符个数是72个,如果超过72个,则需要换行继续写,此时新的一行需要用空格开头,表示是上一行的续行。并且,整个文件的最后必须是以回车换行结束。
相关文章推荐
- JAR包中的MANIFEST.MF文件详解以及编写规范
- JAR包中的MANIFEST.MF文件详解以及编写规范
- Jar包中的META-INF的MANIFEST.MF文件用途
- jar包中的MANIFEST.MF文件学习
- MANIFEST.MF文件Class-Path:节点需要引入的jar太多解决方案
- jar命令制作jar或者修改MANIFEST.MF文件
- JAR包中的MANIFEST.MF文件详解以及编写规范
- jar包的MANIFEST.MF文件
- Eclipse导出Jar包 和 MANIFEST.MF文件
- 使用Manifest和Attributes类解析形如MANIFEST.MF格式文件内容
- Jar文件 META-INF/MANIFEST.MF文件详解
- Eclipse 打jar包,并且在win7 下执行jar文件,MANIFEST.MF文件指定执行入口
- Eclipse导出Jar包,修改Manifest.MF文件的Calss-Path
- JAR包中MANIFEST.MF 文件内容详解
- Maven引入本地jar包并生成jar包运行修改MANIFEST.MF文件
- jar 文件规范(包含manifest.mf规范等)
- MANIFEST.MF文件全面解析
- jar文件中MANIFEST.MF详解
- Jar文件及MANIFEST.MF 文件入门
- maven打jar包同时添加MANIFEST.MF文件中Class-Path所有需要jar