您的位置:首页 > Web前端

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-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.QuorumPeer

3 包扩展属性

(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个,则需要换行继续写,此时新的一行需要用空格开头,表示是上一行的续行。并且,整个文件的最后必须是以回车换行结束。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: