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文件的目录。