JAR文件格式

JAR(Java Archive)是基于ZIP文件格式的文件格式。

它用于捆绑Java应用程序或小程序的资源,类文件,声音文件,图像等。 它还提供数据压缩。一个JAR文件作为一种特殊类型的ZIP文件。可以对JAR文件的内容进行数字签名,以提供安全性。 它提供了一个平台无关的文件格式。

可以使用JAR API在Java程序中处理JAR文件。JAR文件可以具有可选的META-INF目录,以包含包含应用程序配置信息的文件和目录。

META-INF目录

下表列出了META-INF目录中的条目。

名称

类型

目的

MANIFEST.MF

文件

它包含扩展和包相关数据。

INDEX.LIST

文件

它包含软件包的位置信息。 类加载器使用它来加快类搜索和加载过程。

X.SF

文件

X是基本文件名。 它存储jar文件的签名。

X.DSA

文件

X是基本文件名。 它存储相应签名文件的数字签名。

/services

目录

此目录包含所有服务提供程序配置文件。

Jar工具

JDK提供了一个jar工具来创建和操作JAR文件。还可以使用java.util.jar包中的类使用Java API创建和操作JAR文件。

JAR API有一些新类来处理清单文件。Manifest类表示清单文件。要使用jar工具创建JAR文件,许多命令行选项都可用。

以下代码列出了jar工具的命令行选项。

选项

描述

-c

创建一个新的JAR文件。

-u

更新现有的JAR文件。

-x

从JAR文件中提取命名文件或所有文件。

-t

列出JAR文件的目录。

-f

指定JAR文件名。

-m

包括来自指定文件的清单信息。

-M

不要创建清单文件。

-i

为指定的JAR文件生成索引信息。它在JAR文件中的META-INF目录下创建一个INDEX.LIST文件。

-0

不要压缩JAR文件中的条目。 只存储它们,选项值为零,表示零压缩。

-e

将指定的类名添加为清单文件主要部分中Main-Class条目的值。

-v

在标准输出上生成详细输出

-C

切换到指定的目录并在JAR文件中包括以下文件。 请注意,该选项为大写(C)。 小写字母(c)用于指示创建JAR文件选项。

创建JAR文件

使用以下命令创建一个带有两个名为A.class和B.class类的JAR类型文件的test.jar:

jar cf test.jar A.class B.class

在上面的命令中,选项c表示创建一个新的JAR文件,选项f表示指定一个JAR文件名,这里是:test.jar。

在命令结束时,可以指定要包括在JAR文件中的一个或多个文件名或目录名。要查看test.jar文件的内容,请执行以下命令:

jar tf test.jar

选项t表示对JAR文件的目录感兴趣。选项f表示指定了JAR文件名,在这个示例中是test.jar。

上述命令将生成以下输出:

META-INF/

META-INF/MANIFEST.MF A.class

B.class

jar命令自动在META-INF目录中创建了两个额外的东西:一个名为META-INF的目录和一个名为MANIFEST.MF的文件。

以下命令将通过在当前工作目录中包含所有内容来创建test.jar文件。

jar cf test.jar *

以下命令将创建一个JAR文件,其中包含book/archives目录中的所有类文件以及book/images目录中的所有图片。

jar cf test.jar book/archives/*.class book/images

可以在创建JAR文件时使用命令行选项指定清单文件。Manifest文件是一个文本文件,其中包含JAR文件的所有列表条目。

Manifest文件必须在文件末尾有一个空行。 否则,将不处理列表文件中的最后一个条目。

以下命令将在创建test.jar文件(包括当前目录中的所有文件和子目录)时使用manifest.txt文件。

上述命令中使用的选项的顺序很重要。 f出现在m之前,必须在Manifest文件名manifest.txt之前指定JAR文件名test.jar。

可以按如下方式重写上述命令:

jar cmf manifest.txt test.jar *

更新JAR文件

使用选项u更新现有的JAR文件条目或其Manifest文件。以下命令将向现有的test.jar文件添加一个C.class文件:

jar uf test.jar C.class

假设有一个test.jar文件,并且要将它的Manifest文件中的Main-Class条目更改为HelloWorld类。可以使用以下命令:

jar ufe test.jar HelloWorld

在此命令中,选项u表示正在更新JAR文件; 选项f指示指定JAR文件名,即test.jar,选项e表示在test.jar文件中为MANIFEST.MF文件指定Main-Class条目的值为HelloWorld。

索引JAR文件

可以为JAR文件生成一个索引文件。 它用于加快类加载。在创建JAR文件后,必须在单独的命令中使用选项i和jar命令。

jar i test.jar

此命令将向test.jar文件添加一个META-INF/INDEX.LIST文件。可以通过使用以下命令列出test.jar文件的目录来验证它:

jar tf test.jar

提取JAR文件

要从JAR文件中提取所有或部分条目,请使用选项x和jar命令。从test.jar文件中提取所有条目如下 -

jar xf test.jar

选项x是从JAR文件中提取条目。选项f指定文件名,在这个示例中它是test.jar。

上述命令将从当前工作目录中的test.jar文件中提取所有条目。它将创建与test.jar文件中存在的相同的目录结构。要从JAR文件中提取单个条目,请在命令结尾处列出它们。 条目应该用空格分隔。

以下命令将从test.jar文件中提取A.class和book/HelloWorld.class条目:

jar xf test.jar A.class book/HelloWorld.class

要从book目录中提取所有类文件,可以使用以下命令:

jar xf test.jar book/*.class

列表JAR文件内容

使用选项t与jar命令来列出标准输出上的JAR文件的目录。