Jar包的清单文件manifest.MF

发布时间 2023-05-26 14:53:58作者: 镇魂帆2

如何在Java中使用JAR Manifest文件

[摘录](如何在Java中使用JAR Manifest文件(附实例) - 掘金 (juejin.cn))

在Java编程语言中,清单文件是一个文本文件,它包含与程序员的JAR归档文件中包含的文件有关的元数据。这种元数据的范围可以从与包信息有关的信息到安全属性的属性。

一个程序在其JAR归档中只能有一个清单文件,因此,对于开发人员来说,了解如何与这些清单文件打交道以及如何正确使用它们非常重要。在这个Java教程中,你将学习如何在你的Java应用程序中使用JAR清单文件。

Java中的默认清单文件

当您创建一个JAR文件时,也会随之创建一个默认的清单文件。该文件最初包含与清单版本和 JDK 版本有关的两个字段。例如,以下是一个典型的清单文件的内容:

Manifest-Version: 1.0
Created-By: 11.0.3 (Oracle Corporation)

默认清单总是位于JAR文件的路径META-INF/MANIFEST.MF中。

如何在 Java 中修改清单文件

开发人员可以手动修改清单文件,也可以在创建JAR文件时使用m选项来修改。手动修改文件意味着直接向其中添加条目。

正如您在上一节所注意到的,JAR文件包含头:值对。你也可以为你想要的头:值对添加一个条目。然而,需要注意的是,在最后一个条目之后,程序员应该添加一个新行字符。否则,最后一个条目将不能被正确解析。

另外,程序员也可以使用m选项来修改JAR清单文件,如下所示:

jar cfm ArchiveName.jar  add-to-manifest.txt files-to-include

m选项指定您打算将某个文本文件(如add-to-manifest.txt)中的某些信息合并到您现有的JAR清单文件中。

开发人员必须注意,f和m选项的出现顺序应与各自的参数相匹配。您还需要确保您的文本文件以一个新行字符结束。

接下来的两节描述了一些特殊的用例,你可以用你的JAR文件来应用。

JAR文件和Java应用程序打包

JAR文件有时被用来包装Java应用程序。当你决定在JAR文件中运行一个应用程序时,程序员需要指定要使用的入口点。入口点是指你的main()*方法所定义的类。要定义你的应用程序的入口点,请使用*Main-Class头。

例如,如果您的入口点是PackageName包中的ClassName,那么您应该在清单文件中包含以下条目:

Main-Class: PackageName.ClassName

要在你的JAR归档中运行应用程序,你现在可以使用下面的命令:

java -jar  ArchiveName.jar

你也可以使用JAR工具的e选项为你的应用程序设置入口点。需要注意的是,该选项会覆盖您清单文件中的Main-Class头。

下面的Java代码示例创建了一个名为ArchiveName.jar的归档文件,入口点设置为MyClass.class

jar cfe ArchiveName.jar * MyClass.class

在更新您的JAR归档文件时,您也可以使用e选项。如果你的入口点在一个目录中(比如说MyDirectory),那么你在命令行中指定它时可以使用正斜线'/'

jar cfe ArchiveName.jar * MyDirectory/MyClass.class

如何将类添加到JAR Classpath中

在打包你的应用程序时,程序员可能会把不同的类放在几个jar文件中。这里有一个很好的例子,如果一个打包在JAR归档文件中的小程序与打包在不同JAR归档文件中的依赖关系。

为了确保另一个JAR归档文件中的类在你运行时被加载到你的JAR文件中,你需要在你的调用JAR文件中添加它们的classpath

只要在清单文件的Class-Path头中设置路径就可以了。例如,如果要加载的JAR文件与您的调用JAR文件在同一目录下,您可以使用下面的方法:

Class-Path: Other-JAR-File.jar

关于 Java 清单文件的最终想法

清单文件允许开发人员描述与JAR存档中的文件有关的信息。如前所述,一定要记得用一个新行字符来结束你的JAR文件的修改文本文件。