(原文来自于Oracle官网的dob资料。翻译时去掉了一些显而易见的举例,如果需要一些更详细的内容,请点链接查看原文)
The 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 | <applet code=AppletClassName.class archive="JarFileName.jar" width=width height=height> </applet> |
下面是一些详细的介绍:
jar cf ImageAudio.jar -C images * -C audio *结果是
如果不用 -C选项,直接打包:
jar cf ImageAudio.jar images audio
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文件的方法。这里介绍一种用jar指令修改的方法。
只要在选项中增加 m , 则可以实现对manifest的操作。比如cmf是创建jar文件时指定对应manifest文件内容,如下:
jar cmf manifest-addition jar-file input-file(s)
jar uf jar-file input-file(s)当input-file(s)跟JAR文件中原有的文件同名时,则覆盖掉原来的文件。如果没有,则添加相应文件。
添加修改Manifest文件的命令选项后,也可以实现对manifest的更新。
jar umf manifest jar-file注意其中manifest为txt文件,内容是需要更新的manifest文件内容。jar-file则为对应的JAR文件。
java -jar jar-file
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==
Main-Class: classnameMani-Class键标记了整个JAR文件运行的主类。即整个JAR作为一个应用运行时的程序入口。
Class-Path: servlet.jar infobus.jar acme/beans.jar