Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
用于创建 JAR 文件的命令的基本格式为:
jar cf jar-file input-file(s)
此命令中使用的选项和参数是:
c 和 f 选项可以按任意顺序出现,但它们之间不能有任何空格。
此命令将生成压缩的 JAR 文件并将其放在当前目录中。该命令还将为 JAR 存档生成 默认清单文件。
JAR 文件中的元数据(例如清单的条目名称,注释和内容)必须以 UTF8 编码。
你可以将以下任何附加选项添加到基本命令的 cf 选项中:
选项 | 描述 |
---|---|
v | 在构建 JAR 文件时,在 stdout 上生成 verbose (详细) 输出。详细输出告诉你添加到 JAR 文件中的每个文件的名称。 |
0 (zero) | 表示你不希望压缩 JAR 文件。 |
M | 表示不应生成默认清单文件。 |
m | 用于包括现有清单文件中的清单信息。使用此选项的格式为:
jar cmf jar-file existing-manifest input-file(s) 警告: 清单必须以新行或回车结束。如果不以新行或回车结束,则不会正确解析最后一行。 |
-C | 在执行命令期间更改目录。请参阅下面的示例。 |
创建 JAR 文件时,创建时间存储在 JAR 文件中。因此,即使 JAR 文件的内容没有更改,当你多次创建 JAR 文件时,生成的文件也不完全相同。在构建环境中使用 JAR 文件时,应该注意这一点。建议你使用清单文件中的版本控制信息而不是创建时间来控制 JAR 文件的版本。请参阅 Setting Package Version Information 部分。
我们来看一个例子。一个简单的 TicTacToe 小程序。你可以通过从 Java SE Downloads 下载 JDK 演示和示例包来查看此 applet 的源代码。此演示包含具有以下结构的类文件,音频文件和图像:
audio 和 images 子目录包含 applet 使用的声音文件和 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 工具默认压缩文件。你可以使用 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 文件中,并且你希望所有文件都位于顶层,没有目录层次结构。你可以通过从 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