> 创建一个 JAR 文件

用于创建 JAR 文件的命令的基本格式为:

jar cf jar-file input-file(s)

此命令中使用的选项和参数是:

  • c选项表示您要创建 JAR 文件。

  • f选项表示您希望输出到* file *而不是stdout

  • jar\-file是您希望生成的 JAR 文件具有的名称。您可以将任何文件名用于 JAR 文件。按照惯例,JAR 文件名具有\.jarextensions,尽管这不是必需的。

  • input\-file\(s\)参数是要包含在 JAR 文件中的一个或多个文件的空格分隔列表。 input\-file\(s\)参数可以包含通配符\*符号。如果任何“Importing 文件”是目录,则这些目录的内容将递归添加到 JAR 归档中。

cf选项可以按任意 Sequences 出现,但它们之间不能有任何空格。

该命令将生成一个压缩的 JAR 文件,并将其放置在当前目录中。该命令还将为 JAR 存档生成默认清单文件

Note:

必须使用 UTF8 编码 JAR 文件中的元数据,例如条目名称,注解 和清单的内容。

您可以将以下任何其他选项添加到基本命令的cf选项中:

*** jar 命令选项** *

OptionDescription
v在构建 JAR 文件时,在stdout上生成* verbose *输出。详细的输出告诉您每个文件添加到 JAR 文件中的名称。
0(零)表示您不希望压缩 JAR 文件。
M指示不应生成默认清单文件。
m用于包括来自现有清单文件的清单信息。使用此选项的格式为:


jar cmf jar-file existing-manifest input-file(s)
有关此选项的更多信息,请参见修改清单文件

Warning:


> 清单必须以换行符或回车符结尾。如果最后一行没有以新行或回车结尾,则将无法正确解析。
| \-C |在命令执行期间更改目录。请参见下面的示例。

Note:

创建 JAR 文件时,创建时间存储在 JAR 文件中。因此,即使 JAR 文件的内容没有更改,当您多次创建 JAR 文件时,生成的文件也不完全相同。在构建环境中使用 JAR 文件时,您应该意识到这一点。建议您使用清单文件中的版本控制信息(而不是创建时间)来控制 JAR 文件的版本。请参阅设置软件包版本信息部分。

An Example

让我们来看一个例子。一个简单的TicTacToe applet。您可以通过从Java SE 下载下载 JDK 演示和示例 Binding 包来查看此 applet 的源代码。该演示包含具有以下结构的类文件,音频文件和图像:

TicTacToe 文件夹层次结构

TicTacToe 文件夹层次结构

audioimages子目录包含 Servlets 使用的声音文件和 GIF 图像。

在线下载整个教程时,可以从 jar/examples 目录中获取所有这些文件。要将演示打包为一个名为TicTacToe\.jar的 JAR 文件,您可以在TicTacToe目录中运行以下命令:

jar cvf TicTacToe.jar TicTacToe.class audio images

audioimages参数代表目录,因此 Jar 工具会将其及其内容递归地放置在 JAR 文件中。生成的 JAR 文件TicTacToe\.jar将放置在当前目录中。由于该命令将v选项用于详细输出,因此在运行该命令时,您将看到类似于此输出的内容:

adding: TicTacToe.class (in=3825) (out=2222) (deflated 41%)
adding: audio/ (in=0) (out=0) (stored 0%)
adding: audio/beep.au (in=4032) (out=3572) (deflated 11%)
adding: audio/ding.au (in=2566) (out=2055) (deflated 19%)
adding: audio/return.au (in=6558) (out=4401) (deflated 32%)
adding: audio/yahoo1.au (in=7834) (out=6985) (deflated 10%)
adding: audio/yahoo2.au (in=7463) (out=4607) (deflated 38%)
adding: images/ (in=0) (out=0) (stored 0%)
adding: images/cross.gif (in=157) (out=160) (deflated -1%)
adding: images/not.gif (in=158) (out=161) (deflated -1%)

您可以从此输出中看到 JAR 文件TicTacToe\.jar已压缩。 Jar 工具默认情况下会 zipfile。您可以使用0(零)选项关闭压缩功能,从而使命令如下所示:

jar cvf0 TicTacToe.jar TicTacToe.class audio images

您可能要避免压缩,例如,提高浏览器加载 JAR 文件的速度。未压缩的 JAR 文件通常可以比 zipfile 更快地加载,因为消除了在加载过程中对文件进行解压缩的需要。但是,要进行权衡是,对于较大的未 zipfile,网络上的下载时间可能会更 Long。

Jar 工具将接受使用通配符\*符号的参数。只要TicTacToe目录中没有任何不需要的文件,您就可以使用此替代命令来构造 JAR 文件:

jar cvf TicTacToe.jar *

尽管详细输出没有指示出来,但是 Jar 工具会自动将清单文件添加到路径名为META\-INF/MANIFEST\.MF的 JAR 存档中。有关清单文件的信息,请参见处理清单文件:基础知识部分。

在上面的示例中,归档文件中的文件保留了它们的相对路径名和目录结构。 Jar 工具提供了\-C选项,可用于创建一个 JAR 文件,在该文件中不保留归档文件的相对路径。它是根据 TAR 的\-C选项建模的。

例如,假设您要将 TicTacToe 演示所使用的音频文件和 gif 图像放入一个 JAR 文件,并且您希望所有文件都位于顶层,没有目录层次结构。您可以通过从imagesaudio目录的父目录中发出以下命令来完成此操作:

jar cf ImageAudio.jar -C images . -C audio .

此命令的\-C images部分指示 Jar 工具转到images目录,而\-C images之后的\.指示 Jar 工具将该目录的所有内容存档。然后,该命令的\-C audio \.部分对audio目录执行相同的操作。生成的 JAR 文件将具有以下目录:

META-INF/MANIFEST.MF
cross.gif
not.gif
beep.au
ding.au
return.au
yahoo1.au
yahoo2.au

相比之下,假设您使用的命令未使用\-C选项:

jar cf ImageAudio.jar images audio

生成的 JAR 文件将具有以下目录:

META-INF/MANIFEST.MF
images/cross.gif
images/not.gif
audio/beep.au
audio/ding.au
audio/return.au
audio/yahoo1.au
audio/yahoo2.au