您的位置:首页 > 其它

【转载】JAR命令详解

2017-11-20 17:36 267 查看
一、简介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 manifestadding: 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.0Main-Class: Hello  生成的jar文件中的MANIFEST文件为Manifest-Version: 1.0Created-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、[/b] jar cvfm Test.jar  manifest.mf com把com整个目录包到Test.jar,并显示打包的过程。如果Test.jar文件还不存在,就创建它,否则首先清空它。注意[/b]: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.MFhello.classUtil.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[/b]相似,只是对于解压过程有详细信息显示,如:    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[/b]略作改动:  jar cvfM test.zip com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: