注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

民主与科学

独立之人格,自由之思想

 
 
 

日志

 
 

JAR命令详解  

2011-09-11 16:36:17|  分类: JDK命令 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一、简介
jar 是随 JDK 安装的,在 JDK 安装目录下的 bin 目录中,Windows 下文件名为 jar.exe,Linux 下文件名为 jar。它的运行需要用到 JDK 安装目录下 lib 目录中的 tools.jar 文件。不过我们除了安装 JDK 什么也不需要做,因为 SUN 已经帮我们做好了。我们甚至不需要将tools.jar 放到 CLASSPATH 中。  
 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 文件包的时候可用。在jdk1.6中,我实验该命令失败。
文件名 ... 指定一个文件/目录列表,这些文件/目录就是要添加到 JAR 文件包中的文件/目录。如果指定了目录,那么 jar 命令打包的时候会自动把该目录中的所有文件和子目录打入包中。  
二、常用实例
示例1 jar cf Hello.jar hello.class  
把当前目录的hello.class文件打包到Hello.jar,且不显示打包的过程。如果Hello.jar文件还不存在,就创建它,否则首先清空它。
示例2、 jar cvf Hello.jar hello.class  
把当前目录的hello.class文件打包到Hello.jar,并显示打包的过程。如果Hello.jar文件还不存在,就创建它,否则首先清空它。
打包过程显示如下:
added manifest
adding: hello.class(in = 612) (out= 379)(deflated 38%)
示例3、 jar cvf Hello.jar hello.class  Util.class
把当前目录的hello.class和Util.class文件打包到Hello.jar,并显示打包的过程。如果Hello.jar文件还不存在,就创建它,否则首先清空它。
示例4、 jar cvf Hello.jar *.class
把当前目录的所有class文件打包到Hello.jar,并显示打包的过程。如果Hello.jar文件还不存在,就创建它,否则首先清空它。
示例5、 jar cvfM Hello.jar hello.class  
该命令与示例2 结果类似,但在Hello.jar不产生MANIFEST 文件,
示例6、 jar cvfm Hello.jar manifest.mf hello.class Util.class
运行结果与示例3 相似,只是用manifest.mf 指定了jar文件中MANIFEST文件的一些内容。
manifest.mf文件
Manifest-Version: 1.0
Main-Class: Hello
  
生成的jar文件中的MANIFEST文件为
Manifest-Version: 1.0
Created-By: 1.6.0_11 (Sun Microsystems Inc.)
Main-Class: Hello

示例7、 jar cvfm Test.jar  manifest.mf com\robin\*.class
把com\robin目录的所有class文件打包到Test.jar,并显示打包的过程。如果Test.jar文件还不存在,就创建它,否则首先清空它。
注意:jar命令默认是以当前目录作为class的根目录,所以对于com\robin\test.class文件,在jar解压后,test.class文件也在其解压目录的com\robin目录下。
示例8、 jar cvfm Test.jar  manifest.mf com
把com整个目录包到Test.jar,并显示打包的过程。如果Test.jar文件还不存在,就创建它,否则首先清空它。
注意:jar命令默认是以当前目录作为class的根目录,所以对于com\robin\test.class文件,在jar解压后,test.class文件也在其解压目录的com\robin目录下。
示例9、 jar tf Hello.jar 
列出Hello.jar包含的文件清单.
对于示例6生成的Hello.jar结果如下:
META-INF/
META-INF/MANIFEST.MF
hello.class
Util.class
示例10、 jar tvf Hello.jar
显现Hello.jar包含的文件的消息信息.
对于示例6生成的Hello.jar结果如下:  
     0 Sun Sep 11 15:06:10 KST 2011 META-INF/
    90 Sun Sep 11 15:06:10 KST 2011 META-INF/MANIFEST.MF
   612 Sat Sep 10 14:53:14 KST 2011 hello.class
   267 Sat Sep 10 14:53:14 KST 2011 Util.class
示例11、jar xf Hello.jar  
解压Hello.jar 到当前目录,不显示任何信息,对于示例6 生成的 test.jar,解开后的目录结构如下:  
  ==  
  |-- META-INF  
  |  `-- MANIFEST  
  `-- hello.class
       `-- Util.class
示例12、jar xvf Hello.jar  
示例11相似,只是对于解压过程有详细信息显示,如:  
  created: META-INF/
 inflated: META-INF/MANIFEST.MF
 inflated: hello.class
 inflated: Util.class
三、一些技巧  
3.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/  
3.2、 使用其他工具创建JAR 文件  
上面提到 JAR 文件就是包含了META-INF/MANIFEST的 ZIP 文件,所以,只需要使用 WinZip、WinRAR 等工具创建所需要 ZIP 压缩包,再往这个 ZIP 压缩包中添加一个包含 MANIFEST 文件的 META-INF 目录即可。对于使用 jar 命令的 -m 参数指定清单文件的情况,只需要将这个 MANIFEST 按需要修改即可。  
3.3、使用 jar 命令创建 ZIP 文件  
有些 Linux 下提供unzip 命令,但没有 zip 命令,所以需要可以对 ZIP 文件进行解压,即不能创建 ZIP 文件。如要创建一个 ZIP 文件,使用带 -M 参数的 jar 命令即可,因为 -M 参数表示制作 JAR 包的时候不添加 MANIFEST 清单,那么只需要在指定目标 JAR 文件的地方将 .jar 扩展名改为 .zip 扩展名,创建的就是一个不折不扣的 ZIP 文件了,如将示例8略作改动:  
jar cvfM test.zip com
  评论这张
 
阅读(3648)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017