Jar文件中MANIFEST.MF的使用

发布时间:2021-06-01 17:51
最后更新:2021-06-01 17:51
所属分类:
JVM Java

MANIFEST.MF是Java程序发布为Jar文件时用来定义Jar文件相关数据的清单文件。这是一个Jar文件的元数据文件,其中包含了由预定义项目组成的键值对,描述了Jar文件以及其中组成Jar文件的相关内容的信息。

Manifest文件的格式

Manifest文件一般命名为MANIFEST.MF,放置于Jar文件的META-INF目录中,对于正在开发的程序,可以放置在Resources/META-INF目录中。Manifest文件中可以使用空白行将其分隔为若干区域,每个区域定义不同的项目内容以加强文件内容的可读性。Manifest文件的每一行只能包含一组键值对,比使用:分隔项目键和项目值,在:后需要跟一个空格。

Manifest文件必须以一个空白行结束。

以下是一个Manifest文件的示例。

1
2
3
Manifest-Verison: 1.0
Class-Path: . libs/commons-io.jar
Main-Class: xyz.archgrid.demo.app.Application

常用属性介绍

Manifest文件一般并不需要手动编辑,在目前使用Gradle和Maven完成项目构建的情况下,Manifest文件都会由构建工具生成。但是即便是可以使用构建工具自动生成,在大多数情况下也是需要在构建配置文件中设置一些内容的,而这些内容往往都与Manifest文件中可用的属性直接相似或者相同。

所以常用的Manifest文件属性主要有以下这些。

  • Manifest-Version,定义Manifest文件的版本,通常取值为1.0
  • Main-Class,定义Jar文件的入口类,这个类必须包含一个静态的main()方法。当定义了这个属性,就可以通过java -jar xxx.jar命令来直接运行Jar文件。
  • Class-Path,定义Jar文件的类依赖关系,类加载器会依据这里的路径设置来检索Jar文件中所使用到的所有类。
    • Class-Path属性默认使用Jar文件所在的目录作为原始路径,其他路径均相对于这个原始路径设置。
    • 路径./表示Jar文件所在目录,如果设置了这个目录,那么Jar文件所依赖的其他第三方Jar库文件就可以与Jar文件并列放置。
    • 如果需要使用使用绝对路径可以使用file:/引导的文件系统协议,此外还可以使用网络路径。
    • 多个路径之间可以使用空格隔开。
    • 因为Manifest文件一行最多只能放置70个字符,所以对于超长的Class-Path属性需要分行书写,从第二行开始每行需要空两个空格开始。
    • 分多行书写的时候,Class-Path属性之后需要放置一个空白行。
  • Sealed,指示这个包中所定义的类都必须在同一个Jar包中存在。如果在Manifest文件中设置Sealed: true时,必须配合设置name属性。name属性定义的目录下的代码将不能够被外部类加载调用。
  • Extension-Name,定义Jar文件的标识。
  • Implementation-Title,定义扩展实现的标题。
  • Implementation-Version,定义扩展实现的版本。
  • Implementation-Vendor,定义扩展实现的组织名称。
  • Implementation-Vendor-Id,定义扩展实现的组织标识。
  • Implementation-URL,定义当前扩展包的下载地址。
  • Specification-Title,定义扩展规范的标题。
  • Specification-Version,定义扩展贵单的版本。
  • Specification-Vendor,定义维护该规范的组织名称。

通常一个Jar文件的Manifest文件内容只需要定义前三个属性即可。


索引标签
JVM
Java
Jar
MANIFEST.MF
classpath