文档

Java™ 教程-Java Tutorials 中文版
创建 JAR 文件
Trail: Deployment
Lesson: Packaging Programs in JAR Files
Section: Using JAR Files: The Basics

创建 JAR 文件

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

jar cf jar-file input-file(s)

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

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

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


注意: 

JAR 文件中的元数据(例如清单的条目名称,注释和内容)必须以 UTF8 编码。


你可以将以下任何附加选项添加到基本命令的 cf 选项中:

jar 命令选项
选项 描述
v 在构建 JAR 文件时,在 stdout 上生成 verbose (详细) 输出。详细输出告诉你添加到 JAR 文件中的每个文件的名称。
0 (zero) 表示你不希望压缩 JAR 文件。
M 表示不应生成默认清单文件。
m 用于包括现有清单文件中的清单信息。使用此选项的格式为:
jar cmf jar-file existing-manifest input-file(s)
有关此选项的更多信息,请参见 Modifying a Manifest File

警告: 清单必须以新行或回车结束。如果不以新行或回车结束,则不会正确解析最后一行。
-C 在执行命令期间更改目录。请参阅下面的示例。

注意: 

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


一个例子

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

TicTacToe 文件夹层次结构

TicTacToe 文件夹层次结构

audioimages 子目录包含 applet 使用的声音文件和 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 工具默认压缩文件。你可以使用 0(零)选项关闭压缩功能,以便命令如下所示:

jar cvf0 TicTacToe.jar TicTacToe.class audio images

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

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

jar cvf TicTacToe.jar *

虽然详细输出未指示它,但 Jar 工具会自动将清单文件以路径名为 META-INF/MANIFEST.MF 添加到 JAR 存档中。有关清单文件的信息,请参阅 Working with Manifest Files: The Basics 部分。

在上面的示例中,归档中的文件保留了它们的相对路径名和目录结构。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

Previous page: Using JAR Files: The Basics
Next page: Viewing the Contents of a JAR File