在最近,因为老师要求我总结一下有关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结果相同,同时有详细信息显示。
本文详细介绍了Java中JAR命令的使用方法,包括创建可执行和不可执行的JAR文件包,以及各种JAR命令参数的说明。通过多个实例演示了如何创建、更新和解压JAR文件。

被折叠的 条评论
为什么被折叠?



