java - 在 Java 中使用 MANIFEST.MF 文件

标签 java manifest.mf

我注意到 JAR、WAR 和 EAR 文件在 META-INF 文件夹下有一个 MANIFEST.MF 文件。

MANIFEST.MF 文件有什么用?在这个文件中可以指定什么?

最佳答案

使用 Java 开发工具包 1.0 版创建的 JAR 文件中 Manifest 文件的内容如下。

Manifest-Version: 1.0

所有条目都是名称-值对。 header 的名称与它的值之间用冒号隔开。默认 list 表明它符合 list 规范的 1.0 版。 list 还可以包含有关打包在存档中的其他文件的信息。 list 中记录的确切文件信息将取决于 JAR 文件的预期用途。默认 list 文件不假设它应该记录关于其他文件的哪些信息,因此它的单行只包含关于它自己的数据。 专用 list header

根据 JAR 文件的预期角色,可能需要修改默认 list 。如果创建 JAR 文件只是为了存档,那么 MANIFEST.MF 文件就没有用处。 JAR 文件的大多数用途超出了简单的归档和压缩范围,并且需要在 list 文件中包含特殊信息。下面总结了一些特殊用途的 JAR 文件函数所需的头文件的简要说明

捆绑为 JAR 文件的应用程序:如果应用程序捆绑在 JAR 文件中,则需要告知 Java 虚拟机该应用程序的入口点是什么。入口点是任何具有公共(public)静态 void main(String[] args) 方法的类。此信息在 Main-Class header 中提供,其一般形式为:

Main-Class: classname

值类名将替换为应用程序的入口点。

下载扩展: 下载扩展是由其他 JAR 文件的 list 文件引用的 JAR 文件。在典型情况下,applet 将捆绑在一个 JAR 文件中,该文件的 list 引用一个 JAR 文件(或多个 JAR 文件),该文件将用作该 applet 的扩展。扩展可以以相同的方式相互引用。 下载扩展在小程序、应用程序或其他扩展的 list 文件的 Class-Path header 字段中指定。 Class-Path header 可能如下所示,例如:

Class-Path: servlet.jar infobus.jar acme/beans.jar

有了这个头文件,servlet.jar、infobus.jar 和 acme/beans.jar 文件中的类将作为 applet 或应用程序的扩展。 Class-Path header 中的 URL 是相对于小程序或应用程序的 JAR 文件的 URL 给出的。

包密封: 可以选择密封 JAR 文件中的包,这意味着该包中定义的所有类都必须归档在同一个 JAR 文件中。包可能会被密封以确保软件中类之间的版本一致性或作为安全措施。 要密封一个包,需要为包添加一个 Name header ,然后是一个 Sealed header ,类似于:

Name: myCompany/myPackage/
Sealed: true

Name header 的值是包的相对路径名。请注意,它以“/”结尾以与文件名区分开来。 Name header 之后的任何 header (没有任何中间空行)适用于 Name header 中指定的文件或包。在上面的示例中,由于 Sealed header 出现在 Name: myCompany/myPackage header 之后,并且之间没有空行,因此 Sealed header 将被解释为(仅)应用于包 myCompany/myPackage。

包版本控制:包版本控制规范定义了几个 list 头来保存版本控制信息。可以将一组这样的标题分配给每个包。版本控制 header 应直接显示在包的名称 header 下方。此示例显示所有版本控制 header :

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

关于java - 在 Java 中使用 MANIFEST.MF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12767886/

相关文章:

java - 如何生成与 com.auth0 java-jwt 一起使用的 RSA key ?

java - 如何将 manifest.mf 类路径用于同一个 jar 中的替代主程序?

android - 为什么需要CERT.SF文件来验证android中的apk?

java - 无法找到或加载主类 - 我无法运行从 Ant 创建的 .jar 文件

java - JAR 入口点实际上必须在 JAR 内部吗?

java - 在 Spring 中禁用 @Scheduled 方法/bean

java - 从我的 DTO 创建列表

java - com.fasterxml.jackson.core.JsonParseException : Unrecognized character escape 'U' (code 85)

java - 如何从bean的getter方法获取属性值?

java - 使用 JDK 和/或 JRE 提供的工具,有没有办法查看给定 JAR 的 list 文件?