JAR文件操作基础(Using JAR Files: The Basics)

(原文来自于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文件


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的操作。比如cmf是创建jar文件时指定对应manifest文件内容,如下:

jar cmf manifest-addition jar-file input-file(s)

这里 manifest-addition 是用户自己编辑好的文本文件,文件名没有特殊要求,内容为需要写入JAR的manifest文件内容。

更新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文件。

运行 JAR 软件包中程序

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键标记了需要下载的扩展包。
如果使用  java -jar xxx.jar 方法执行jar包中的应用,则指令会忽略-classpath选项,这个时候就必须在manifest中增加相应的class-path了!


阅读更多
个人分类: java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭