使用 Java 开发工具包 1.0 版创建的 JAR 文件中的 Manifest 文件的内容如下。
Manifest-Version: 1.0
所有条目都是名称-值对。标头的名称与其值之间用冒号分隔。默认清单显示它符合清单规范 1.0 版。
清单还可以包含有关打包在存档中的其他文件的信息。清单中记录的具体文件信息取决于 JAR 文件的预期用途。默认清单文件不假设它应该记录有关其他文件的哪些信息,因此它的单行仅包含有关其自身的数据。
特殊用途清单标头
根据 JAR 文件的预期作用,可能需要修改默认清单。如果 JAR 文件只是出于归档目的而创建,则 MANIFEST.MF 文件没有任何用途。
JAR 文件的大多数用途超出了简单的归档和压缩范围,并且需要在清单文件中包含特殊信息。下面总结了一些特殊用途 JAR 文件函数所需的标头的简要描述
捆绑为 JAR 文件的应用程序:如果应用程序捆绑在 JAR 文件中,则需要告知 Java 虚拟机该应用程序的入口点是什么。入口点是任何具有 public static void main(String[] args) 方法的类。此信息在 Main-Class 标头中提供,其一般形式为:
Main-Class: classname
值 classname 将替换为应用程序的入口点。
下载扩展:下载扩展名是由其他 JAR 文件的清单文件引用的 JAR 文件。在典型情况下,小程序将捆绑在一个 JAR 文件中,该文件的清单引用一个 JAR 文件(或多个 JAR 文件),该文件将用作该小程序的扩展。扩展可以以相同的方式相互引用。
下载扩展在小程序、应用程序或其他扩展的清单文件的 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 标头的值是包的相对路径名。请注意,它以“/”结尾,以区别于文件名。 Name 标头后面的任何标头(中间没有任何空行)都适用于 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."
附加信息:https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html