文档

Java™教程
隐藏目录
创建一个JAR文件
跟踪:部署
课程:将程序打包为JAR文件
章节:使用JAR文件:基础知识

创建JAR文件

创建JAR文件的基本格式是:

jar cf jar文件 输入文件

该命令中使用的选项和参数如下:

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

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


注意: 

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


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

jar命令选项
选项 描述
v 在构建JAR文件时在stdout上产生详细输出。详细输出会告诉您每个文件被添加到JAR文件中的名称。
0(零) 表示您不希望压缩JAR文件。
M 表示不生成默认清单文件。
m 用于从现有清单文件中包含清单信息。使用此选项的格式为:
jar cmf jar文件 现有清单 输入文件
有关此选项的更多信息,请参见修改清单文件

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

注意: 

创建JAR文件时,创建时间会存储在JAR文件中。因此,即使JAR文件的内容没有改变,当你多次创建JAR文件时,生成的文件并不完全相同。在使用JAR文件的构建环境时,你应该注意这一点。建议你在清单文件中使用版本信息来控制JAR文件的版本,而不是使用创建时间。详见设置包版本信息章节。


一个例子

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

TicTacToe文件夹层次结构

TicTacToe文件夹层次结构

audioimages子目录包含了小程序使用的声音文件和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工具会自动向JAR存档中添加一个路径名为META-INF/MANIFEST.MF的清单文件。有关清单文件的信息,请参见使用清单文件:基础知识部分。

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

上一页: 使用JAR文件:基础知识
下一页: 查看JAR文件的内容