Java Jar文件
Java IO教程 - Java Jar文件
JAR文件格式
JAR(Java Archive)是基于ZIP文件格式的文件格式。
它用于捆绑Java应用程序或小程序的资源,类文件,声音文件,图像等。它还提供数据压缩。
一个JAR文件作为一种特殊类型的ZIP文件。您可以对JAR文件的内容进行数字签名,以提供安全性。它提供了一个平台无关的文件格式。
您可以使用JAR API在Java程序中处理JAR文件。
JAR文件可以具有可选的META-INF目录,以包含包含应用程序配置信息的文件和目录。
META-INF目录
下表列出了META-INF目录中的条目。
名称 | 类型 | 目的 |
---|---|---|
MANIFEST.MF | File | 它包含扩展和包相关数据。 |
INDEX.LIST | File | 它包含软件包的位置信息。类加载器使用它来加快类搜索和加载过程。 |
X.SF | File | X是基本文件名。它存储jar文件的签名。 |
X.DSA | File | X是基本文件名。它存储相应签名文件的数字签名。 |
/services | Directory | 此目录包含所有服务提供程序配置文件。 |
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)的test.jar 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的目录和一个名为MANIFEST.MF的文件在META-INF目录中。
以下命令将通过在当前工作目录中包含所有内容来创建test.jar文件。
jar cf test.jar *
以下命令将创建一个JAR文件,其中包含book / archives目录中的所有类文件以及book / images目录中的所有图像。
jar cf test.jar book/archives/*.class book/images
我们可以在创建JAR文件时使用命令行选项指定清单文件。
清单文件是一个文本文件,其中包含您的JAR文件的所有清单条目。
清单文件必须在文件末尾有一个空行。否则,将不处理清单文件中的最后一个条目。
以下命令将在创建test.jar文件(包括当前目录中的所有文件和子目录)时使用manifest.txt文件。
jar cfm test.jar manifest.txt *
上述命令中使用的选项的顺序很重要。 f出现在m之前,我们必须在清单文件名manifest.txt之前指定JAR文件名test.jar。
您可以重写以上命令,如下所示:
jar cmf manifest.txt test.jar *
更新JAR文件
使用选项u更新现有的JAR文件条目或其清单文件。
以下命令将向现有的test.jar文件添加一个C.class文件:
jar uf test.jar C.class
假设我们有一个test.jar文件,并且我们要将它的清单文件中的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
要从书目录中提取所有类文件,可以使用以下命令:
jar xf test.jar book/*.class
列表JAR文件内容
使用选项t与jar命令来列出标准输出上的JAR文件的目录。
jar tf test.jar
更多建议: