现在的位置: 首页 > 综合 > 正文

jar – Java 归档工具

2013年09月08日 ⁄ 综合 ⁄ 共 3044字 ⁄ 字号 评论关闭

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 *.class
0
只储存,不进行 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
$

抱歉!评论已关闭.