MANIFEST.MF是Java程序发布为Jar文件时用来定义Jar文件相关数据的清单文件。这是一个Jar文件的元数据文件,其中包含了由预定义项目组成的键值对,描述了Jar文件以及其中组成Jar文件的相关内容的信息。
Manifest文件的格式
Manifest文件一般命名为MANIFEST.MF
,放置于Jar文件的META-INF
目录中,对于正在开发的程序,可以放置在Resources/META-INF
目录中。Manifest文件中可以使用空白行将其分隔为若干区域,每个区域定义不同的项目内容以加强文件内容的可读性。Manifest文件的每一行只能包含一组键值对,比使用:
分隔项目键和项目值,在:
后需要跟一个空格。
Manifest文件必须以一个空白行结束。
以下是一个Manifest文件的示例。
|
|
常用属性介绍
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文件内容只需要定义前三个属性即可。