jar - Java 归档工具
将多个文件合并成单个 JAR 归档文件。
结构
jar [ options ] [manifest] destination input-file [input-files]
说明
jar 工具是个 java 应用程序,可将多个文件合并为单个 JAR 归档文件。jar 是个多用途的存档及压缩工具,它基于 ZIP 和 ZLIB 压缩格式。然而,设计 jar 的主要目的是便于将 java applet 或应用程序打包成单个归档文件。将 applet 或应用程序的组件( .class 文件、图像和声音)合并成单个归档文件时,可以用 java 代理(如浏览器)在一次 HTTP 事务处理过程中 对它们进行下载,而不是对每个组件都要求一个新连接。这大大缩短了下载时间。jar 还能压缩文件,从而进一步提高了下载速度。此外,它允许 applet 的作者对文件中的各个项进行签名,因而可认证其来源。jar 工具的语法基本上与
tar
命令的语法相同。工具是个 java 应用程序,可将多个文件合并为单个 JAR 归档文件。jar 是个多用途的存档及压缩工具,它基于 ZIP 和 ZLIB 压缩格式。然而,设计 jar 的主要目的是便于将 java applet 或应用程序打包成单个归档文件。将 applet 或应用程序的组件( .class 文件、图像和声音)合并成单个归档文件时,可以用 java 代理(如浏览器)在一次 HTTP 事务处理过程中 对它们进行下载,而不是对每个组件都要求一个新连接。这大大缩短了下载时间。jar 还能压缩文件,从而进一步提高了下载速度。此外,它允许 applet 的作者对文件中的各个项进行签名,因而可认证其来源。jar 工具的语法基本上与
tar
命令的语法相同。jar 工具的输入文件分为三种类型:
- 清单文件(可选)
- 目标 jar 文件
- 待归档的文件
通常用法是:
% jar cf myjarfile *.class在这个示例中,当前目录中的所有类文件都被放置到名为 "myjarfile" 的文件中。清单文件由 jar 工具自动生成,并且始终是 jar 文件的第一项。缺省情况下,它被命名为 META-INF/MANIFEST.MF。清单文件是存储与归档有关的元信息的地方。有关如何将元信息储存到清单文件的详细资料,请参阅清单规范。
如果事先已有一个清单文件且希望 jar 工具将它用于新的 jar 归档,则可以用 -m 选项来指定它:
% jar cmf myManifestFile myJarFile *.class清单使用 RFC822 ascii 格式,因此,很容易查看和处理“清单文件”的内容。
c
- 在标准输出上创建新归档或空归档。
t
- 在标准输出上列出内容表。
x
file- 从标准输入提取所有文件,或只提取指定的文件。如果省略了 file,则提取所有文件;否则只提取指定文件。
f
- 第二个参数指定要处理的 jar 文件。在
c
(创建)情形中,第二个参数指的是要创建的 jar 文件的名称(不是在标准输出上)。在t
(表)或x
(抽取)这两种情形中,第二个参数指定要列出或抽取的 jar 文件。v
- 在标准错误输出设备上生成长格式的输出结果。
m
- 包括指定的现有清单文件中的清单信息。用法举例:
jar cmf myManifestFile myJarFile *.class0
- 只储存,不进行 ZIP 压缩。
M
- 不创建项目的清单文件。
u
- 通过添加文件或更改清单来更新现有的 JAR 文件。例如:
jar -uf foo.jar foo.class将文件 foo.class 添加到现有的 JAR 文件 foo.jar 中,而
jar umf manifest foo.jar则用 manifest 中的信息更新 foo.jar 的清单。
-C
- 在执行 jar 命令期间更改目录。例如:
jar -uf foo.jar -C classes *将 classes 目录内的所有文件加到 foo.jar 中,但不添加类目录本身。
如果有的“files”
是目录,则该目录将被递归处理。
示例
将某个特定目录中的所有文件加到归档文件中:
$ ls 0.au 3.au 6.au 9.au at_work.gif 1.au 4.au 7.au Animator.class monkey.jpg 2.au 5.au 8.au Wave.class spacemusic.au $ jar cvf bundle.jar * adding: 0.au adding: 1.au adding: 2.au adding: 3.au adding: 4.au adding: 5.au adding: 6.au adding: 7.au adding: 8.au adding: 9.au adding: Animator.class adding: Wave.class adding: at_work.gif adding: monkey.jpg adding: spacemusic.au $如果您的 html 目录中已有图像、音频文件和类的子目录,可以将每个目录归档到单个 jar 文件中:
$ ls audio classes images $ jar cvf bundle.jar audio classes images adding: audio/1.au adding: audio/2.au adding: audio/3.au adding: audio/spacemusic.au adding: classes/Animator.class adding: classes/Wave.class adding: images/monkey.jpg adding: images/at_work.gif $ ls -l total 142 drwxr-xr-x 2 brown green 512 Aug 1 22:33 audio -rw-r--r-- 1 brown green 68677 Aug 1 22:36 bundle.jar drwxr-xr-x 2 brown green 512 Aug 1 22:26 classes drwxr-xr-x 2 brown green 512 Aug 1 22:25 images $然后可以用 jar 工具和 "t" 选项查看 jarfile 中的项名:
$ ls audio bundle.jar classes images $ jar tf bundle.jar META-INF/MANIFEST.MF audio/1.au audio/2.au audio/3.au audio/spacemusic.au classes/Animator.class classes/Wave.class images/monkey.jpg images/at_work.gif $用长格式进行列举(用 "v" 选项)将显示归档文件中各文件的更为详细的信息,例如各文件的大小和上次修改时间:
$ jar tvf bundle.jar 145 Thu Aug 01 22:27:00 PDT 1996 META-INF/MANIFEST.MF 946 Thu Aug 01 22:24:22 PDT 1996 audio/1.au 1039 Thu Aug 01 22:24:22 PDT 1996 audio/2.au 993 Thu Aug 01 22:24:22 PDT 1996 audio/3.au 48072 Thu Aug 01 22:24:23 PDT 1996 audio/spacemusic.au 16711 Thu Aug 01 22:25:50 PDT 1996 classes/Animator.class 3368 Thu Aug 01 22:26:02 PDT 1996 classes/Wave.class 12809 Thu Aug 01 22:24:48 PDT 1996 images/monkey.jpg 527 Thu Aug 01 22:25:20 PDT 1996 images/at_work.gif $