08-04
28

jar  命令详解

jar  是随  JDK  安装的,在  JDK  安装目录下的  bin  目录中,Windows  下文件名为  jar.exe,Linux  下文件名为  jar。它的运行需要用到  JDK  安装目录下  lib  目录中的  tools.jar  文件。不过我们除了安装  JDK  什么也不需要做,因为  SUN  已经帮我们做好了。我们甚至不需要将  tools.jar  放到  CLASSPATH  中。  

使用不带任何的  jar  命令我们可以看到  jar  命令的用法如下:  

jar  {ctxu}[vfm0M]  [jar-文件]  [manifest-文件]  [-C  目录]  文件名  ...  

其中  {ctxu}  是  jar  命令的子命令,每次  jar  命令只能包含  ctxu  中的一个,它们分别表示:  

-c 创建新的  JAR  文件包  

-t 列出  JAR  文件包的内容列表  

-x 展开  JAR  文件包的指定文件或者所有文件  

-u 更新已存在的  JAR  文件包  (添加文件到  JAR  文件包中)  

[vfm0M]  中的选项可以任选,也可以不选,它们是  jar  命令的选项参数  

-v 生成详细报告并打印到标准输出  

-f 指定  JAR  文件名,通常这个参数是必须的  

-m 指定需要包含的  MANIFEST  清单文件  

-0 只存储,不压缩,这样产生的  JAR  文件包会比不用该参数产生的体积大,但速度更快  

-M 不产生所有项的清单(MANIFEST〕文件,此参数会忽略  -m  参数  

[jar-文件]  即需要生成、查看、更新或者解开的  JAR  文件包,它是  -f  参数的附属参数  

[manifest-文件]  即  MANIFEST  清单文件,它是  -m  参数的附属参数  

[-C  目录]  表示转到指定目录下去执行这个  jar  命令的操作。它相当于先使用  cd  命令转该目录下再执行不带  -C  参数的  jar  命令,它只能在创建和更新  JAR  文件包的时候可用。    

文件名  ...  指定一个文件/目录列表,这些文件/目录就是要添加到  JAR  文件包中的文件/目录。如果指定了目录,那么  jar  命令打包的时候会自动把该目录中的所有文件和子目录打入包中。  

下面举一些例子来说明  jar  命令的用法:  

1)  jar  cf  test.jar  test  

该命令没有执行过程的显示,执行结果是在当前目录生成了  test.jar  文件。如果当前目录已经存在  test.jar,那么该文件将被覆盖。  

2)  jar  cvf  test.jar  test  

该命令与上例中的结果相同,但是由于  v  参数的作用,显示出了打包过程,如下:  

标明清单(manifest)  

增加:test/(读入=  0)  (写出=  0)(存储了  0%)  

增加:test/Test.class(读入=  7)  (写出=  6)(压缩了  14%)  

3)  jar  cvfM  test.jar  test  

该命令与  2)  结果类似,但在生成的  test.jar  中没有包含  META-INF/MANIFEST  文件,打包过程的信息也略有差别:  

增加:test/(读入=  0)  (写出=  0)(存储了  0%)  

增加:test/Test.class(读入=  7)  (写出=  6)(压缩了  14%)  

4)  jar  cvfm  test.jar  manifest.mf  test  

运行结果与  2)  相似,显示信息也相同,只是生成  JAR  包中的  META-INF/MANIFEST  内容不同,是包含了  manifest.mf  的内容  

5)  jar  tf  test.jar  

在  test.jar  已经存在的情况下,可以查看  test.jar  中的内容,如对于  2)  和  3)  生成的  test.jar  分别应该此命令,结果如下;  

对于  2)  

META-INF/  

META-INF/MANIFEST.MF  

test/  

test/Test.class  

对于  3)  

test/  

test/Test.class  

6)  jar  tvf  test.jar  

除显示  5)  中显示的内容外,还包括包内文件的详细信息,如:  

0  Wed  Jun  19  15:39:06  GMT  2002  META-INF/  

86  Wed  Jun  19  15:39:06  GMT  2002  META-INF/MANIFEST.MF  

0  Wed  Jun  19  15:33:04  GMT  2002  test/  

7  Wed  Jun  19  15:33:04  GMT  2002  test/Test.class  

7)  jar  xf  test.jar  

解开  test.jar  到当前目录,不显示任何信息,对于  2)  生成的  test.jar,解开后的目录结构如下:  

  ==  

    |--  META-INF  

    |   `--  MANIFEST  

  `--  test  

    `--Test.class  

8)  jar  xvf  test.jar  

运行结果与  7)  相同,对于解压过程有详细信息显示,如:  

创建:META-INF/  

展开:META-INF/MANIFEST.MF  

创建:test/  

展开:test/Test.class  

9)  jar  uf  test.jar  manifest.mf  

在  test.jar  中添加了文件  manifest.mf,此使用  jar  tf  来查看  test.jar  可以发现  test.jar  中比原来多了一个  manifest。这里顺便提一下,如果使用  -m  参数并指定  manifest.mf  文件,那么  manifest.mf  是作为清单文件  MANIFEST  来使用的,它的内容会被添加到  MANIFEST  中;但是,如果作为一般文件添加到  JAR  文件包中,它跟一般文件无异。  

10)  jar  uvf  test.jar  manifest.mf  

与  9)  结果相同,同时有详细信息显示,如:  

增加:manifest.mf(读入=  17)  (写出=  19)(压缩了  -11%)  

4.  关于  JAR  文件包的一些技巧  

1)  使用  unzip  来解压  JAR  文件  

在介绍  JAR  文件的时候就已经说过了,JAR  文件实际上就是  ZIP  文件,所以可以使用常见的一些解压  ZIP  文件的工具来解压  JAR  文件,如  Windows  下的  WinZip、WinRAR  等和  Linux  下的  unzip  等。使用  WinZip  和  WinRAR  等来解压是因为它们解压比较直观,方便。而使用  unzip,则是因为它解压时可以使用  -d  参数指定目标目录。  

在解压一个  JAR  文件的时候是不能使用  jar  的  -C  参数来指定解压的目标的,因为  -C  参数只在创建或者更新包的时候可用。那么需要将文件解压到某个指定目录下的时候就需要先将这具  JAR  文件拷贝到目标目录下,再进行解压,比较麻烦。如果使用  unzip,就不需要这么麻烦了,只需要指定一个  -d  参数即可。如:  

unzip  test.jar  -d  dest/  

2)  使用  WinZip  或者  WinRAR  等工具创建  JAR  文件  

上面提到  JAR  文件就是包含了  META-INF/MANIFEST  的  ZIP  文件,所以,只需要使用  WinZip、WinRAR  等工具创建所需要  ZIP  压缩包,再往这个  ZIP  压缩包中添加一个包含  MANIFEST  文件的  META-INF  目录即可。对于使用  jar  命令的  -m  参数指定清单文件的情况,只需要将这个  MANIFEST  按需要修改即可。  

3)  使用  jar  命令创建  ZIP  文件  

有些  Linux  下提供了  unzip  命令,但没有  zip  命令,所以需要可以对  ZIP  文件进行解压,即不能创建  ZIP  文件。如要创建一个  ZIP  文件,使用带  -M  参数的  jar  命令即可,因为  -M  参数表示制作  JAR  包的时候不添加  MANIFEST  清单,那么只需要在指定目标  JAR  文件的地方将  .jar  扩展名改为  .zip  扩展名,创建的就是一个不折不扣的  ZIP  文件了,如将上一节的第  3)  个例子略作改动:  

---------------------------------------------------------------  

如果只想看一下有什么东东,用winrar也可以看。  
用法:jar  {ctxu}[vfm0M]  [jar-文件]  [manifest-文件]  [-C  目录]  文件名  ...  
选项:  
       -c    创建新的存档  
       -t    列出存档内容的列表  
       -x    展开存档中的命名的(或所有的〕文件  
       -u    更新已存在的存档  
       -v    生成详细输出到标准输出上  
       -f    指定存档文件名  
       -m    包含来自标明文件的标明信息  
       -0    只存储方式;未用ZIP压缩格式  
       -M    不产生所有项的清单(manifest〕文件  
       -i    为指定的jar文件产生索引信息  
       -C    改变到指定的目录,并且包含下列文件:  
如果一个文件名是一个目录,它将被递归处理。  
清单(manifest〕文件名和存档文件名都需要被指定,按'm'  和  'f'标志指定的相同顺序。  

示例1:将两个class文件存档到一个名为  'classes.jar'  的存档文件中:  
             jar  cvf  classes.jar  Foo.class  Bar.class  
示例2:用一个存在的清单(manifest)文件  'mymanifest'  将  foo/  目录下的所有  
                     文件存档到一个名为  'classes.jar'  的存档文件中:  
             jar  cvfm  classes.jar  mymanifest  -C  foo/  .  

---------------------------------------------------------------  

jar  cvf  flight.jar  aa\aa1  aa\aa2  

文件名后面是你要压缩的文件所在的目录,可以跟多个  
---------------------------------------------------------------  

jar  cvf  class.jar  GreetingServlet.class  22.class  33.class  
创建jar包  
如果你要查看tools.jar中的内容,用解压缩软件(比如rar)解开就可以看了

文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: jar 命令 指令
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.