# 创建 JAR 文件 > 原文: [https://docs.oracle.com/javase/tutorial/deployment/jar/build.html](https://docs.oracle.com/javase/tutorial/deployment/jar/build.html) 用于创建 JAR 文件的命令的基本格式为: ``` jar cf jar-file input-file(s) ``` 此命令中使用的选项和参数是: * `c` 选项表示您希望 _ 创建 _ JAR 文件。 * `f` 选项表示您希望输出转到 _ 文件 _ 而不是`标准输出`。 * `jar 文件`是您希望生成的 JAR 文件具有的名称。您可以使用任何文件名作为 JAR 文件。按照惯例,JAR 文件名被赋予 `.jar` 扩展名,但这不是必需的。 * `输入文件`参数是要包含在 JAR 文件中的一个或多个文件的空格分隔列表。 `输入文件`参数可以包含通配符 `*` 符号。如果任何“输入文件”是目录,则这些目录的内容将以递归方式添加到 JAR 存档中。 `c` 和 `f` 选项可以按任意顺序出现,但它们之间不能有任何空格。 此命令将生成压缩的 JAR 文件并将其放在当前目录中。该命令还将为 JAR 存档生成[默认清单文件](defman.html)。 * * * **Note:**  JAR 文件中的元数据(例如清单的条目名称,注释和内容)必须以 UTF8 编码。 * * * 您可以将以下任何附加选项添加到基本命令的 `cf` 选项中: **jar command options** | 选项 | 描述 | | --- | --- | | `v` | 在构建 JAR 文件时,在 `stdout` 上生成 _ 详细 _ 输出。详细输出告诉您每个文件的名称,因为它已添加到 JAR 文件中。 | | `0` (零) | 表示您不希望压缩 JAR 文件。 | | `M` | 表示不应生成默认清单文件。 | | `m` | 用于包括现有清单文件中的清单信息。使用此选项的格式为: | | `jar cmf jar 文件 现有清单 输入文件` | | | 有关此选项的更多信息,请参阅[修改清单文件](modman.html)。| | `-C` | 在执行命令期间更改目录。请参阅下面的示例。 | * * * **警告:**清单必须以新行或回车结束。如果最后一行没有以新行或回车结束,则不会正确解析。 * * * **Note:**  创建 JAR 文件时,创建时间存储在 JAR 文件中。因此,即使 JAR 文件的内容没有更改,当您多次创建 JAR 文件时,生成的文件也不完全相同。在构建环境中使用 JAR 文件时,应该注意这一点。建议您使用清单文件中的版本控制信息而不是创建时间来控制 JAR 文件的版本。请参阅[设置包版本信息](packageman.html)部分。 * * * ## 一个例子 我们来看一个例子。一个简单的 `TicTacToe` 小程序。您可以通过从 [Java SE 下载](http://www.oracle.com/technetwork/java/javase/downloads/index.html)下载 JDK 演示和示例包来查看此 applet 的源代码。此演示包含具有以下结构的类文件,音频文件和图像: ![TicTacToe folder Hierarchy](img/562a451db5e5ce820d754b8d57666280.jpg) **TicTacToe folder Hierarchy** `音频`和`图像`子目录包含小程序使用的声音文件和 GIF 图像。 在线下载整个教程时,您可以从 _jar / examples_ 目录中获取所有这些文件。要将此演示打包到名为 `TicTacToe.jar` 的单个 JAR 文件中,您可以从 `TicTacToe` 目录中运行此命令: ``` jar cvf TicTacToe.jar TicTacToe.class 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 工具会自动将清单文件添加到 JAR 存档中,路径名为 `META-INF / MANIFEST.MF` 。有关清单文件的信息,请参阅[使用清单文件:基础知识](manifestindex.html)部分。 在上面的示例中,归档中的文件保留了它们的相对路径名和目录结构。 Jar 工具提供 `-C` 选项,您可以使用该选项创建 JAR 文件,其中不保留已归档文件的相对路径。它以 TAR 的 `-C` 选项为模型。 例如,假设您想将 TicTacToe 演示使用的音频文件和 gif 图像放入 JAR 文件中,并且您希望所有文件都位于顶层,没有目录层次结构。您可以通过从`图像`和 `audio` 目录的父目录发出此命令来完成此操作: ``` jar cf ImageAudio.jar -C images . -C audio . ``` 此命令的 `-C 图像`部分指示 Jar 工具转到`图像`目录和`。 ``后面的`指示 Jar 工具存档该目录的所有内容。 `-C 音频。` 命令的一部分然后对`音频`目录执行相同的操作。生成的 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 ```