The Java(Java教程 Java培训 ) Archive (JAR) File Format JAR文件是用ZIP文件格式打包的,所以你可以在一些类似ZIP的任务中使用它,进行压缩、解压、打包或者解开包。这些都是JAR文件最普遍的使用方式,你能发现许多JAR文件的优势都是源自这些基本的特点。
即使你希望能够使用JAR中那些先进的功能比如电子签名,你也得先熟悉一些基本的操作方式。
你可以使用Java Archive Tool 来完成JAR文件操作。这个工具被包含在JDK中。因为Java Archive Tool 通过jar命令来调用,为了方便,我们也可以称它为jat tool.
下面是最基本的命令操作:
操作 命令创建一个JAR文件。 jar cf jar-file input-file(s)
查看JAR文件的内容 jar tf jar-file导出JAR文件 jar xf jar-file导出JAR文件中制定的文件包 jar xf jar-file archived-file(s)
运行JAR文件中的应用jre -cp app.jar MainClass运行用JAR格式打包的应用java -jar app.jar调用一个打包成JAR的applet 下面是一些详细的介绍:
创建JAR文件
jar -cf jar-file input-file(s)
其中c表示create,f表示file,后面紧跟jar-file.也可以增加一个v选项(verbose),以显示详细信息 jar -cvf jar-file input-file(s)
其实这些命令跟常见的tar打包命令类似,方便记忆。
另外,在1.2的版本中还设置了一种 -C 的选项。可以让某些文件夹中的文件直接被打包到根目录下,而没有原始的层次结构的束缚。如下例:jar cf ImageAudio.jar -C images * -C audio *结果是META-INF/MANIFEST.MF cross.gif nor.gif beep.au ding.au return.au yahoo1.au yahoo2.au
如果不用 -C选项,直接打包:
jar cf ImageAudio.jar images audio
结果如下:META-INF/MANIFEST.MF image/cross.gif image/nor.gif audio/beep.au audio/ding.au audio/return.au audio/yahoo1.au audio/yahoo2.au
查看JAR文件中的内容You can这时候并没有解压jar文件,直接查看文件内容。
jar tvf TicTacToe.jar同样的,也可以增加 -v 选项(verbose),显示详细的查看过程。
解压JAR文件包
将jar文件包中的内容解压出来,在当前工作目录下(而不是jar文件包所在目录)创建解压文件包。
当然,也可以定向的解压指定的文件。如下,其中仅有TicTacToe.class images/cross.gif将会被解压出来。
jar xf TicTacToe.jar TicTacToe.class images/cross.gif
修改Manifest文件有不少修改Manifest文件的方法。这里介绍一种用jar指令修改的方法。
有一个m选项,可以将用户自己编辑的manifest文件同其他文件夹一起打包为JAR文件。
jar cmf manifest-addition jar-file input-file(s)
这里 manifest-addition 是用户自己编辑好的文本文件,文件名没有特殊要求,内容为需要写入JAR的manifest文件内容。其他的跟创建JAR文件一样。
更新JAR文件
jar uf jar-file input-file(s)
当input-file(s)跟JAR文件中原有的文件同名时,则覆盖掉原来的文件。如果没有,则添加相应文件。
添加修改Manifest文件的命令选项后,也可以实现对manifest的更新。
jar umf manifest jar-file注意其中manifest为txt文件,内容是需要更新的manifest文件内容。jar-file则为对应的JAR文件。
Running JAR-Packaged Software
java -jar jar-file
以上命令执行的条件是 JAR的Manifest文件中具有 Main-Class: 标记。这个标记标明了整个JAR为相应的主类服务,这个主类中必须含有static main 程序入口。
理解Manifest文件
JAR文件能够支持许多功能,包括电子签名,版本控制,包加密,扩展等等。这些都是manifest文件的功劳!
manifest是一个特殊的文本文件,JAR文件包中所有文件的信息都可以包含在其中。通过在manifest中设置不同的值,你能给JAR包增添各种不同的特殊用途。
在我们看各种不同的用途之前,先看看manifest的默认内容:文件的默认路径是
META-INF/MANIFEST.MF默认内容是
Manifest-Version: 1.0这一行展示了manifest的基本的格式:键值对。键和值用":"分开。默认manifest中展示了版本号。
Manifest-Version: 1.0
Name: java/math/BigDecimal.class
SHA1-Digest: TD1GZt8G11dXY2p4olSZPc5Rj64=
MD5-Digest: z6z8xPj2AW/Q9AKRSF0cg==
Name: java/math/BigInteger/class
SHA1-Digest:oB1GZt8G11dXY2p4olSZPc5Rj64=
MD5-Digest: z6z8xPj2AW/8HAKRSF0cg==
这里展示了JAR文件中,不同。class文件的不同属性。Name标记了不同的子文件,之后的SHA1_Digest则是对应文件的属性。
Main-Class: classname Mani-Class键标记了整个JAR文件运行的主类。即整个JAR作为一个应用运行时的程序入口。
Class-Path: servlet.jar infobus.jar acme/beans.jar Class-Path键标记了需要下载的扩展包。