我注意到JAR,WAR和EAR MANIFEST.MF文件在该META-INF文件夹下有一个文件。
MANIFEST.MF
META-INF
该MANIFEST.MF文件有什么用?在此文件中可以指定什么?
以下是使用Java开发工具包1.0版创建的JAR文件中清单文件的内容。
Manifest-Version: 1.0
所有条目都是“名称/值”对。标题名称与其值之间用冒号分隔。默认清单显示它符合清单规范的1.0版。清单还可以包含有关归档文件中打包的其他文件的信息。清单中确切记录的文件信息将取决于JAR文件的预期用途。默认清单文件不假设它应该记录关于其他文件的信息,因此其单行仅包含有关其自身的数据。专用清单头
根据JAR文件的预期角色,可能需要修改默认清单。如果仅出于存档目的而创建JAR文件,则MANIFEST.MF文件没有任何作用。JAR文件的大多数用途不只是简单的存档和压缩,而且还要求特殊信息包含在清单文件中。下面总结了一些特殊目的JAR文件功能所需的标头的简要说明
捆绑为JAR文件 的应用程序 : 如果应用程序捆绑在JAR文件中,则需要告知Java虚拟机该应用程序的入口点是什么。入口点是具有公共静态void main(String [] args)方法的任何类。此信息在Main-Class标头中提供,该标头具有以下一般形式:
Main-Class: classname
值classname将替换为应用程序的入口点。
下载扩展: 下载扩展是其他JAR文件的清单文件引用的JAR文件。在典型情况下,小应用程序将捆绑在一个JAR文件中,该JAR文件的清单引用一个JAR文件(或几个JAR文件),该文件将作为该小应用程序的扩展名。扩展可以以相同的方式相互引用。下载扩展名是在applet,应用程序或其他扩展名的清单文件中的Class- Path标头字段中指定的。Class-Path标头可能看起来像这样,例如:
Class-Path: servlet.jar infobus.jar acme/beans.jar
使用此标头,文件servlet.jar,infobus.jar和acme / beans.jar中的类将用作applet或应用程序的扩展。Class- Path标头中的URL是相对于applet或应用程序的JAR文件的URL给出的。
程序包密封: 可以选择密封JAR文件中的程序包,这意味着必须将该程序包中定义的所有类归档在同一JAR文件中。可以对软件包进行密封,以确保软件中各类之间的版本一致性或作为安全措施。要密封包装,需要为包装添加一个Name标头,然后添加一个Sealed标头,类似于:
Name: myCompany/myPackage/ Sealed: true
Name标头的值是程序包的相对路径名。请注意,它以“ /”结尾以将其与文件名区分开。名称标头之后的所有标头(中间无空白行)适用于在名称标头中指定的文件或包。在上面的示例中,由于Sealed标头出现在Name:myCompany / myPackage标头之后,之间没有空行,因此Sealed标头将解释为(仅)应用于包myCompany / myPackage。
程序包版本控制: 程序包版本控制规范定义了几个清单标头来保存版本信息。可以将一组这样的标题分配给每个程序包。版本标头应直接出现在包的名称标头下方。本示例显示所有版本控制标头:
Name: java/util/ Specification-Title: "Java Utility Classes" Specification-Version: "1.2" Specification-Vendor: "Sun Microsystems, Inc.". Implementation-Title: "java.util" Implementation-Version: "build57" Implementation-Vendor: "Sun Microsystems, Inc."