2.4 jar文件的创建与查看

本节将详细介绍如何实现最常用的打包方法。包括创建.jar文件、查看jar文件的内容、提取jar文件的内容、更新jar文件和运行打包的jar软件。通过本章的学习,了解Java中jar工具的真正意义与功能。

说明

如果读者采用完全自学,可以先忽略本节的内容,直接跳到第2.5节学习,等用到jar的时候再回来学习。

2.4.1 创建jar文件

创建.jar文件的基本命令格式为:


jar cf jar-file input-file(s)


其中每个选项或参数的含义如下:

❑jar:启动JDK的jar工具。

❑c:该选项表示此时调用jar工具的目的是创建一个jar文件。

❑jar-file:该选项表示打包的结果文件名,该文件生成后有.jar扩展名,该文件的名称没有要求,只要便于理解记忆即可。可以在创建jar文件时就在jar-file后添加.jar扩展名,默认不用添加扩展名。

❑input-file(s):该参数表示添加到jar文件中的文件。该参数可以包含通配符*,也可以包含目录(一个或多个),如果是目录则把目录下的所有文件依次打包进jar文件。

命令jar cf会在当前目录下生成一个经过压缩的jar文件,并且产生一个默认的manifest文件,该文件会列出jar文件中的所有文件。

还有一些选项可以添加到cf选项之间,这些选项及其含义如表2.2所示。

2.4 jar文件的创建与查看 - 图1

在了解了如何创建基本的jar文件和各种选项之后,下面通过一个创建jar文件的例子,来更具体地学习jar工具的具体实现方式和各种参数的含义。

【实例2.1】笔者设计了一个类MyJarTest,该类需要音频资源和图片资源,把该文件打包成一个jar文件,这样就可在任何平台上运行该程序。该程序和资源放在目录MyJarTest目录下,文件结构如图2.6所示。


说明

因为此时读者还没有学习类的知识,这里只是给出一个大概的过程让读者了解打包jar文件的流程,不需要读者亲自动手。如果读者不感兴趣,可以直接跳过2.4节。

2.4 jar文件的创建与查看 - 图2

图 2.6 MyJarTest目录结构

其中包含两个子目录myaudio和myimages,这两个子目录中包含程序所需要的音频和图像信息。下面需要把上述文件打包成名为MyJarTest.jar的文件,首先在DOS窗口中转到MyJarTest目录下,在当前目录下输入打包的命令格式如下:


Jar cvf MyJarTest.jar MyJarTest.class myaudio myimages


说明

因为myaudio和myimages是目录,所以Jar工具会迭代地访问这些文件夹并把文件夹中的文件添加到MyJarTest.jar文件中。因为使用了cvf选项,所以在打包的过程中会显示添加文件的内容。最后生成的MyJarTest.jar文件存储在当前目录下。图2.7是创建压缩的jar文件。

2.4 jar文件的创建与查看 - 图3

图 2.7 创建压缩的jar文件

从图2.7中可以看出创建该jar文件中的文件都经过了压缩处理,并显示了压缩比例,如果不需要压缩处理而创建不经过压缩的jar文件,可以选择0参数。

Java的jar工具提供了非压缩的打包参数,是因为考虑到实际应用中的效率。如当用户下载Applet肯定不希望过长的传输时间,如果该Applet采用压缩过的jar文件,使用户在下载之前先解压压缩文件,再经过网络传输到客户端,这样就比较耗时,而采用不经过压缩Applet的jar文件就减少了解压缩的时间。创建非压缩的jar文件的命令格式如下所示。


Jar cvf0 MyJarTest.jar MyJarTest.class myaudio myimages


输出结果如图2.8所示,这是创建未压缩的jar文件。

2.4 jar文件的创建与查看 - 图4

图 2.8 创建未压缩的jar文件

刚才讲过Jar工具也接受使用*通配符的参数,如果在当前目录下的所有文件都需要打包就可以使用通配符,它表示在当前目录下的所有文件都需要打包成jar文件。可以采用如下的命令方式创建jar文件。


Jar cvf MyJarTest.jar*


该命令的执行结果与图2.8相似,只是向MyJarTest.jar中添加的文件数量不同。

上述例子中,在jar文件中附带了打包文件自己的路径名和目录结构。在查看jar文件时会清楚地看到这一点,如图2.9所示。

说明

这里使用了查看jar文件内容的命令jar tf jar-file.jar,读者不必关注其具体含义,关键是观察文件的内容,注意文件的目录结构。

Jar工具提供了一个-C选项,使创建的jar文件不保存被打包文件的相关路径名。

下面举例说明,假设用户想把音频文件和图像文件创建为一个jar文件,并且该jar文件中的所有文件没有目录结构,即所有文件在最高层的同一目录下。可以使用如下命令完成上述任务:


Jar cf ImageAudio.jar-C myimages.-C myaudio.


参数-C myimages告诉Jar工具进入myimages路径,随后告诉Jar工具将该目录下的所有文件打包。参数-C myaudio告诉Jar工具进入myaudio路径,随后告诉Jar工具将该目录下的所有文件打包。在参数-C、myimages和.之间必须有空格。为了显示压缩过程,这里使用cvf参数。执行结果如图2.10所示。

2.4 jar文件的创建与查看 - 图5

图 2.9 查看MyJarTest.jar文件内容

2.4 jar文件的创建与查看 - 图6

图 2.10 使用-C参数压缩并打包文件

在ImageAudio.jar创建成功后,该jar文件的内容列表如图2.11所示。此时调用了查看jar文件的命令jar tf jar-file.jar。输出如图2.11所示。

注意

图2.11中使用了查看jar文件内容的命令jar tf jar-file.jar,该命令显示jar文件的内容,注意这里没有文件的目录结构,所有文件在一个目录中。

如果没有采用-C选项将音频文件和图像文件打包成jar文件,则该jar文件的内容为具有目录结构的文件列表。使用命令jar cf ImageAudio.jar myimages myaudio来打包文件并使用jar tf ImageAudio.jar查看文件内容。文件内容列表如图2.12所示。

2.4 jar文件的创建与查看 - 图7

图 2.11 查看ImageAudio.jar内容

2.4 jar文件的创建与查看 - 图8

图 2.12 查看带目录结构的ImageAudio.jar