jar包相关命令详解

在最近,因为老师要求我总结一下有关jar命令的相关知识,所以整合了许多资料,作了以下的总结:

1.      Jar 文件包:
 
JAR 文件就是 Java Archive File ,是 Java 的一种文档格式。 JAR 文件非常类似 ZIP 文件,更准确的说,它就是 ZIP 文件,所以叫它文件包。 JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的。
 
2. 创建 jar 文件包:
 
       Jar文件包分为两类:可执行jar文件包和不可执行的jar文件包。它们的区别是jar文件包里 META-INF/MANIFEST.MF 文件是否 jar 指定了包含入口函数public static void main(String[]) 方法的 主类。至于如何编写 MANIFEST.MF ,下文会提及。
 
2.1 创建不可执行的 jar 文件包:
       如果你创建一个 jar 文件包,仅仅用于打包你的 .class 字节码文件,不需要它们直接双击就能运行的话或者要打包一些不含主类的 .class 字节码文件,那么你可以创建不可执行的 jar 文件包。
       jar cvf [jar 包文件名 ] [ 要打包的 .class 文件或包含全部 .class 文件的文件夹 ]
       2-1 jar cvf test.jar X.class Y.class
       打包过后 jar 包里包含 META-INF 文件夹,而该文件夹里有 MANIFEST.MF ,这都是自动被创建的;而与 META-INF 文件夹同级目录下则包含了被打包的 X.class Y.class
       2-2 jar cvf test.jar bao
       打包过后, jar 包里包含 META-INF 文件夹,而该文件夹里有 MANIFEST.MF ,这都是自动被创建的;而与 META-INF 文件夹同级目录下则包含了文件夹 bao
 
2.2 创建可执行的 jar 文件包:
 
制作一个可执行的 JAR 文件包来发布你的程序是 JAR 文件包最典型的用法。
创建可执行的 JAR 文件包,需要使用带 cvfm 参数的 jar 命令(这是创建可执行jar文件包一般使用的参数,下文会对参数有详细的解释),命令的格式如下:
jar cvfm [jar 包文件名 ] manifest.mf  [ 要打包的 .class 文件或包含全部 .class 文件的包 ]
       例2-3:jar cvfm test.jar manifest.mf X.class Y.class
       打包后的目录结构与2.1相同,但是最大的区别是在jar文件包的META-INF/MANIFEST.MF中指明了主类。那么就要求我们在打包之前先创建一个自己的MANIFEST.MF。而在 MANIFEST.MF 中书写格式如下(假设X.class为主类):
       Main-Class: 可执行主类全名(包含包名) <回车>
       例如:Main-Class: X<回车符>
注意:MANIFEST 中书写的关键在于Main-Class:与可执行主类全名(包含包名)要留一空格,而且必须以一空行结束,即是以一个回车符结束。
除此之外,创建的 JAR 文件包中需要包含完整的、与 Java 程序的包结构对应的目录结构。而 Main-Class 指定的类,也必须是完整的、包含包路径的类名。
继续以上面为例,假设X.class和Y.class都在包bao中,并且X.class为主类
例2-4:创建jar包的命令为:
       jar cvfm test.jar manifest.mf bao
而在manifest.mf 中书写为:
       Main-Class: bao.X<回车符>
打包过后, jar包里包含META-INF文件夹,而该文件夹里有MANIFEST.MF,这都是自动被创建的;而与META-INF文件夹同级目录下则包含了包bao。
       运行可执行jar文件包,可直接双击jar文件包,或在命令行中输入 java –jar [要运行的jar文件包],或者创建一个.bar批处理文件,内容编辑为java –jar [要运行的jar文件包],放在与jar文件夹同一目录下,直接双击该文件也可运行
 
3.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命令的使用方法:
例3-1:jar cf test.jar bao
该命令没有打印压缩的执行过程,执行结果是在当前目录生成了 test.jar 文件。而且
jar包里包含META-INF文件夹,而该文件夹里有MANIFEST.MF,这都是自动被创建的;而与META-INF文件夹同级目录下则包含了文件夹bao。
 
例3-2 jar cvf test.jar bao
该命令与上例中的结果相同,但是由于 v 参数的作用,显示出了打包过程。
 
例3-3 jar cvfM test.jar bao
该命令与例3-2结果类似,但在生成的 test.jar 中没有包含 META-INF/MANIFEST 文件,也有打印出压缩的执行过程。
 
例3-4 jar cvfm test.jar manifest.mf bao
运行结果与例3-2相似,打印信息也相同,只是生成 JAR 包中的 META-INF/MANIFEST 内容不同,是包含了 manifest.mf 的内容
 
例3-5 jar tf test.jar
在 test.jar 已经存在的情况下,可以查看 test.jar 中的内容,结果如下:
META-INF/
META-INF/MANIFEST.MF
bao/
X.class
 
例3-6 jar tvf test.jar
除显示中例3-5显示的内容外,还包括包内文件的详细信息,如:
0 Fri May 19 15:39:06 GMT 2010 META-INF/
 
86 Fri May 19 15:39:06 GMT 2010 META-INF/MANIFEST.MF
 
0 Fri May 19 15:39:06 GMT 2010 bao/
 
7 Fri May 19 15:39:06 GMT 2010 bao/X.class
 
例3-7 jar xf test.jar
解压test.jar 到当前目录,不打印任何信息。
 
例3-8 jar xvf test.jar
解压test.jar 到当前目录,打印解压过程的详细信息。
 
例3-9 jar uf test.jar Y.class
在 test.jar 中添加了文件Y.class
 
例3-10 jar uvf test.jar Y.class
与例3-9结果相同,同时有详细信息显示。
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值