> 创建一个 JAR 文件
用于创建 JAR 文件的命令的基本格式为:
jar cf jar-file input-file(s)
此命令中使用的选项和参数是:
-
c
选项表示您要创建 JAR 文件。 -
f
选项表示您希望输出到* file *而不是stdout
。 -
jar\-file
是您希望生成的 JAR 文件具有的名称。您可以将任何文件名用于 JAR 文件。按照惯例,JAR 文件名具有\.jar
extensions,尽管这不是必需的。 -
input\-file\(s\)
参数是要包含在 JAR 文件中的一个或多个文件的空格分隔列表。input\-file\(s\)
参数可以包含通配符\*
符号。如果任何“Importing 文件”是目录,则这些目录的内容将递归添加到 JAR 归档中。
c
和f
选项可以按任意 Sequences 出现,但它们之间不能有任何空格。
该命令将生成一个压缩的 JAR 文件,并将其放置在当前目录中。该命令还将为 JAR 存档生成默认清单文件。
Note:
必须使用 UTF8 编码 JAR 文件中的元数据,例如条目名称,注解 和清单的内容。
您可以将以下任何其他选项添加到基本命令的cf
选项中:
*** jar 命令选项** *
Option | Description |
---|---|
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 文件夹层次结构
audio
和images
子目录包含 Servlets 使用的声音文件和 GIF 图像。
在线下载整个教程时,可以从 jar/examples 目录中获取所有这些文件。要将演示打包为一个名为TicTacToe\.jar
的 JAR 文件,您可以在TicTacToe
目录中运行以下命令:
jar cvf TicTacToe.jar TicTacToe.class audio images
audio
和images
参数代表目录,因此 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 文件,并且您希望所有文件都位于顶层,没有目录层次结构。您可以通过从images
和audio
目录的父目录中发出以下命令来完成此操作:
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