post:增加Manifest.mf文件的使用。
This commit is contained in:
parent
7b25205c53
commit
fe18923811
59
source/_posts/about-jar-manifest.md
Normal file
59
source/_posts/about-jar-manifest.md
Normal file
|
@ -0,0 +1,59 @@
|
|||
---
|
||||
title: Jar文件中MANIFEST.MF的使用
|
||||
tags:
|
||||
- JVM
|
||||
- Java
|
||||
- Jar
|
||||
- MANIFEST.MF
|
||||
- classpath
|
||||
categories:
|
||||
- - JVM
|
||||
- Java
|
||||
keywords: 'Java,jar,MANIFEST,MF,MANIFEST.MF,打包,classpath'
|
||||
date: 2021-06-01 17:51:21
|
||||
---
|
||||
|
||||
MANIFEST.MF是Java程序发布为Jar文件时用来定义Jar文件相关数据的清单文件。这是一个Jar文件的元数据文件,其中包含了由预定义项目组成的键值对,描述了Jar文件以及其中组成Jar文件的相关内容的信息。<!-- more -->
|
||||
|
||||
## Manifest文件的格式
|
||||
|
||||
Manifest文件一般命名为`MANIFEST.MF`,放置于Jar文件的`META-INF`目录中,对于正在开发的程序,可以放置在`Resources/META-INF`目录中。Manifest文件中可以使用空白行将其分隔为若干区域,每个区域定义不同的项目内容以加强文件内容的可读性。Manifest文件的每一行只能包含一组键值对,比使用`:`分隔项目键和项目值,在`:`后需要跟一个空格。
|
||||
|
||||
!!! caution "重要"
|
||||
Manifest文件必须以一个空白行结束。
|
||||
|
||||
以下是一个Manifest文件的示例。
|
||||
|
||||
```
|
||||
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文件内容只需要定义前三个属性即可。
|
Loading…
Reference in New Issue
Block a user