请参考百度百科的说明:
MANIFEST.MF :此manifest文件定义与扩展和包相关的数据。 单词” manifest “意思是”表示”
打开Java的JAR文件时,可以清楚地看到文件包含META-INF目录。 此目录下始终有MANIFEST.MF,其中包含JAR文件的许多信息。 详细说明MANIFEST.MF文件的内容。 首先,让我们看看struts.jar中包含的manifest文件
管理版本: 1.0
创建- by : Apache ant1.5. 1
扩展- name 3360 struts框架
规范-标题3360 struts框架
se cification-vendor : apachesoftwarefoundation
规范-版本: 1.1
实施-标题3360 struts框架
实施-供应商: apachesoftwarefoundation
implementation-vendor-id : org.Apache
实施版本: 1.1
class-path : commons-beanutils.jar commons-collections.jar commons-digester.jar commons-loggging.jar commons -。
可以将MANIFEST配置信息分类为以下大类别:
一.一般属性
1 .管理版本
定义管理文件的版本。 例如Manifest-Version: 1.0
2 .创建者
声明此文件的生成者。 此属性通常由jar命令行工具生成。 例如Created-By: Apache Ant 1.5.1
3 .信号版本
定义jar文件的签名版本
4 .类-路径
APP应用程序或类加载器使用此值构建内部类搜索路径
2 .与APP应用程序相关的属性
1 .主类
定义必须是可执行类的jar文件的条目类。 定义属性后,可以从java -jar x.jar运行此类。
三.小程序的相关属性
1 .扩展列表
此属性指定小程序所需的扩展信息列表,列表中的每个名称对应于以下属性
2.-扩展- name
3.-规范-版本
4.-实施-版本
5. -Implementation-Vendor-Id
5.-实施- URL
4 .扩展徽标属性
1 .扩展名称
此属性定义jar文件(如扩展名称: struts framework )的标识符
5 .包扩展属性
1 .实施标题定义了扩展实现的标题
2 .实施版本定义了扩展实现的版本
3 .定义实施-厂商扩展实施的组织
4 .标识定义实施-厂商-标识扩展实现的组织
5.implementation -定义URL :扩展包的下载位置(URL )
6 .定义规范标题扩展规范的标题
7 .定义规范版本扩展规范的版本
8 .规范厂商声明了维持这一规范的组织
9. Sealed定义jar文件是否已归档,其值可以为true或false (这一点我还不太清楚)。
6 .与签名有关的属性
有关签名的属性,请参见JavaMail提供的mail.jar部分
name : javax/mail/address.class
Digest-Algorithms: SHA MD5
sha-digest : ajr7rqnn//cdygouxbd 06 msv fi4=
MD5-digest : zntiq2aqatsniowxi1pqpw==
此内容定义类签名的类名、计算摘要的算法名称以及相应的摘要内容(例如
ASE64方法进行编码)
七.自定义属性
除了前面提到的一些属性外,你也可以在MANIFEST.MF中增加自己的属性以及响应的值,例如J2ME程序jar包中就可能包含着如下信息
MicroEdition-Configuration: CLDC-1.0
MIDlet-Name: J2ME_MOBBER Midlet Suite
MIDlet-Info-URL: http://www.javayou.com/
MIDlet-Icon: /icon.png
MIDlet-Vendor: Midlet Suite 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信息。
编写MANIFEST.MF文件时的注意事项:
说明:一般编写MANIFEST.MF文件只需要用到Manifest-Version(MF文件版本号)、Main-Class(包含main方法的类)、Class-Path(执行这个jar包时的ClassPath,第三方依赖)
比如以下的例子:
Manifest-Version: 1.0Main-Class: test.Main
Class-Path: ./ ./lib/commons-collections-3.2.jar ./lib/commons-dbcp-1.2.2.jar ./lib/commons-lang-2.3.jar ./lib/commons-logging-1.1.jar
以下是需要注意的各个要点:
0. 最后一样一定要回车,空一行,不然无法识别最后一行的配置。
1. Manifest-Version、Main-Class和Class-Path后面跟着一个英文的冒号,冒号后面必须跟着一个空格,然后才是版本号、类和ClassPath。
2. Class-Path中的各项应使用空格分隔,不是逗号或分号。
3. Class-Path中如果有很多项,写成一行打包的时候会报错line too long,这时需要把Class-Path分多行写。注意:从第二行开始,必须以两个空格开头,三个以上我没试过,不过不用空格开头和一个空格开头都是不行的,我已经试过了。
4. Class-Path写完之后最后一定要有一个空行。
5. jar包内有些配置文件想放在jar包外面,比如文件config.properties:如果这个文件是以路径方式载入的,比如new file(“./config/config.properties”),那么将config.properties放在jar包相同目录下的config目录下即可,也就是说“./”路径等价于jar包所在目录;如果这个文件是以ClassPath下的文件这种方式载入的,比如在Spring中载入classpath:config.properties,则在MF文件的配置文件的ClassPath中添加“./”,然后将这个配置文件与jar包放在同一个目录即可,当然也可以在MF文件的配置文件的ClassPath中添加“./config/”,然后把配置文件都放在jar包相同目录下的config目录下。