The Java(Java教程 Java培訓(xùn) ) Archive (JAR) File Format JAR文件是用ZIP文件格式打包的,所以你可以在一些類似ZIP的任務(wù)中使用它,進(jìn)行壓縮、解壓、打包或者解開包。這些都是JAR文件最普遍的使用方式,你能發(fā)現(xiàn)許多JAR文件的優(yōu)勢(shì)都是源自這些基本的特點(diǎn)。
即使你希望能夠使用JAR中那些先進(jìn)的功能比如電子簽名,你也得先熟悉一些基本的操作方式。
你可以使用Java Archive Tool 來完成JAR文件操作。這個(gè)工具被包含在JDK中。因?yàn)镴ava Archive Tool 通過jar命令來調(diào)用,為了方便,我們也可以稱它為jat tool.
下面是最基本的命令操作:
操作 命令創(chuàng)建一個(gè)JAR文件。 jar cf jar-file input-file(s)
查看JAR文件的內(nèi)容 jar tf jar-file導(dǎo)出JAR文件 jar xf jar-file導(dǎo)出JAR文件中制定的文件包 jar xf jar-file archived-file(s)
運(yùn)行JAR文件中的應(yīng)用jre -cp app.jar MainClass運(yùn)行用JAR格式打包的應(yīng)用java -jar app.jar調(diào)用一個(gè)打包成JAR的applet 下面是一些詳細(xì)的介紹:
創(chuàng)建JAR文件
jar -cf jar-file input-file(s)
其中c表示create,f表示file,后面緊跟jar-file.也可以增加一個(gè)v選項(xiàng)(verbose),以顯示詳細(xì)信息 jar -cvf jar-file input-file(s)
其實(shí)這些命令跟常見的tar打包命令類似,方便記憶。
另外,在1.2的版本中還設(shè)置了一種 -C 的選項(xiàng)。可以讓某些文件夾中的文件直接被打包到根目錄下,而沒有原始的層次結(jié)構(gòu)的束縛。如下例:jar cf ImageAudio.jar -C images * -C audio *結(jié)果是META-INF/MANIFEST.MF cross.gif nor.gif beep.au ding.au return.au yahoo1.au yahoo2.au
如果不用 -C選項(xiàng),直接打包:
jar cf ImageAudio.jar images audio
結(jié)果如下: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文件中的內(nèi)容You can這時(shí)候并沒有解壓jar文件,直接查看文件內(nèi)容。
jar tvf TicTacToe.jar同樣的,也可以增加 -v 選項(xiàng)(verbose),顯示詳細(xì)的查看過程。
解壓JAR文件包
將jar文件包中的內(nèi)容解壓出來,在當(dāng)前工作目錄下(而不是jar文件包所在目錄)創(chuàng)建解壓文件包。
當(dāng)然,也可以定向的解壓指定的文件。如下,其中僅有TicTacToe.class images/cross.gif將會(huì)被解壓出來。
jar xf TicTacToe.jar TicTacToe.class images/cross.gif
修改Manifest文件有不少修改Manifest文件的方法。這里介紹一種用jar指令修改的方法。
有一個(gè)m選項(xiàng),可以將用戶自己編輯的manifest文件同其他文件夾一起打包為JAR文件。
jar cmf manifest-addition jar-file input-file(s)
這里 manifest-addition 是用戶自己編輯好的文本文件,文件名沒有特殊要求,內(nèi)容為需要寫入JAR的manifest文件內(nèi)容。其他的跟創(chuàng)建JAR文件一樣。
更新JAR文件
jar uf jar-file input-file(s)
當(dāng)input-file(s)跟JAR文件中原有的文件同名時(shí),則覆蓋掉原來的文件。如果沒有,則添加相應(yīng)文件。
添加修改Manifest文件的命令選項(xiàng)后,也可以實(shí)現(xiàn)對(duì)manifest的更新。
jar umf manifest jar-file注意其中manifest為txt文件,內(nèi)容是需要更新的manifest文件內(nèi)容。jar-file則為對(duì)應(yīng)的JAR文件。
Running JAR-Packaged Software
java -jar jar-file
以上命令執(zhí)行的條件是 JAR的Manifest文件中具有 Main-Class: 標(biāo)記。這個(gè)標(biāo)記標(biāo)明了整個(gè)JAR為相應(yīng)的主類服務(wù),這個(gè)主類中必須含有static main 程序入口。
理解Manifest文件
JAR文件能夠支持許多功能,包括電子簽名,版本控制,包加密,擴(kuò)展等等。這些都是manifest文件的功勞!
manifest是一個(gè)特殊的文本文件,JAR文件包中所有文件的信息都可以包含在其中。通過在manifest中設(shè)置不同的值,你能給JAR包增添各種不同的特殊用途。
在我們看各種不同的用途之前,先看看manifest的默認(rèn)內(nèi)容:文件的默認(rèn)路徑是
META-INF/MANIFEST.MF默認(rèn)內(nèi)容是
Manifest-Version: 1.0這一行展示了manifest的基本的格式:鍵值對(duì)。鍵和值用":"分開。默認(rèn)manifest中展示了版本號(hào)。
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標(biāo)記了不同的子文件,之后的SHA1_Digest則是對(duì)應(yīng)文件的屬性。
Main-Class: classname Mani-Class鍵標(biāo)記了整個(gè)JAR文件運(yùn)行的主類。即整個(gè)JAR作為一個(gè)應(yīng)用運(yùn)行時(shí)的程序入口。
Class-Path: servlet.jar infobus.jar acme/beans.jar Class-Path鍵標(biāo)記了需要下載的擴(kuò)展包。