jar命令的用法詳解

本文詳細講述了JAR命令的用法翁都,對于大家學習和總結jar命令的使用有一定的幫助作用。具體如下:

JAR包是Java中所特有一種壓縮文檔,其實大家就可以把它理解為.zip包铐刘。當然也是有區(qū)別的,JAR包中有一個META-INF\MANIFEST.MF文件,當你找成JAR包時,它會自動生成诈悍。

JAR包是由JDK安裝目錄\bin\jar.exe命令生成的,當我們安裝好JDK躏筏,設置好path路徑,就可以正常使用jar.exe命令呈枉,它會用lib\tool.jar工具包中的類趁尼。這些細節(jié)就不用管它了。

讓我們看看它怎么么使用吧:

一.jar命令參數(shù):

jar命令格式:jar {c t x u f }[ v m e 0 M i ][-C 目錄]文件名…

其中{ctxu}這四個參數(shù)必須選選其一猖辫。[v f m e 0 M i ]是可選參數(shù)酥泞,文件名也是必須的。

-c 創(chuàng)建一個jar包

-t 顯示jar中的內容列表

-x 解壓jar包

-u 添加文件到jar包中

-f 指定jar包的文件名

-v 生成詳細的報造啃憎,并輸出至標準設備

-m 指定manifest.mf文件.(manifest.mf文件中可以對jar包及其中的內容作一些一設置)

-0 產生jar包時不對其中的內容進行壓縮處理

-M 不產生所有文件的清單文件(Manifest.mf)芝囤。這個參數(shù)與忽略掉-m參數(shù)的設置

-i 為指定的jar文件創(chuàng)建索引文件

-C 表示轉到相應的目錄下執(zhí)行jar命令,相當于cd到那個目錄,然后不帶-C執(zhí)行jar命令

二.jar使用范例:

(1)創(chuàng)建jar包

jar cf hello.jar hello

利用test目錄生成hello.jar包,如hello.jar存在,則覆蓋

(2)創(chuàng)建并顯示打包過程

jar cvf hello.jar hello

利用hello目錄創(chuàng)建hello.jar包,并顯示創(chuàng)建過程

例:

E:\>jar cvf hello.jar hello

標明清單(manifest)

增加:hello/(讀入= 0) (寫出= 0)(存儲了 0%)

增加:hello/TestServlet2.class(讀入= 1497) (寫出= 818)(壓縮了 45%)

增加:hello/HelloServlet.class(讀入= 1344) (寫出= 736)(壓縮了 45%)

增加:hello/TestServlet1.class(讀入= 2037) (寫出= 1118)(壓縮了 45%)

(3)顯示jar包:

jar tvf hello.jar 查看hello.jar包的內容

指定的jar包必須真實存在辛萍,否則會發(fā)生FileNoutFoundException悯姊。

(4)解壓jar包:

jar xvf hello.jar

解壓hello.jar至當前目錄

(5)jar中添加文件:

jar uf hello.jar HelloWorld.java

將HelloWorld.java添加到hello.jar包中

(6)創(chuàng)建不壓縮內容jar包:

jar cvf0 hello.jar*.class

利用當前目錄中所有的.class文件生成一個不壓縮jar包

(7)創(chuàng)建帶manifest.mf文件的jar包:

jar cvfm hello.jar manifest.mf hello

創(chuàng)建的jar包多了一個META-INF目錄,META-INF止錄下多了一個manifest.mf文件,至于manifest.mf的作用,后面會提到.

(8)忽略manifest.mf文件:

jar cvfM hello.jar hello

生成的jar包中不包括META-INF目錄及manifest.mf文件

(9)加-C應用:

jar cvfm hello.jar mymanifest.mf-C hello/

表示在切換到hello目錄下然后再執(zhí)行jar命令

(10)-i為jar文件生成索引列表:

當一個jar包中的內容很好的時候,你可以給它生成一個索引文件贩毕,這樣看起來很省事悯许。

jar i hello.jar

執(zhí)行完這條命令后,它會在hello.jar包的META-INF文件夾下生成一個名為INDEX.LIST的索引文件辉阶,它會生成一個列表先壕,最上邊為jar包名瘩扼。

(11)導出解壓列表:

jar tvf hello.jar >hello.txt 如果你想查看解壓一個jar的詳細過程,而這個jar包又很大启上,屏幕信息會一閃而過邢隧,這時你可以把列表輸出到一個文件中店印,慢慢欣賞冈在!

**12)jar -cvf hello.jar hello/***

例如原目錄結構如下:

hello

|—com

|—org

你本想只把com目錄和org目錄打包,而這時jar命令會連同hello目洋也一塊打包進按摘。這點大家要注意包券。jar命令生成的壓縮文件會包含它后邊出的目錄。我們應該進入到hello目錄再執(zhí)行jar命令炫贤。

注意:manifest.mf這個文件名溅固,用戶可以任指定,但jar命令只認識Manifest.mf兰珍,它會對用戶指定的文件名進行相應在的轉換侍郭,這不需用戶擔心。

三.Manifest.mf文件編寫規(guī)則:

manifest.mf的編寫一定要注意一些細節(jié)掠河,它是很苛刻的,我在此也載過不少跟頭亮元,誰讓它這么小氣呢,沒辦法唠摹,所以專門給大家列出來爆捞。

(1) 不能有空行和空格的地方

第一行不可以是空行( 第一行的行前不可以有空行),行與行之間不能有空行勾拉,第行的行尾不可以有空格

(2) 一定要有空行的地方

最后一行得是空行(在輸完你的內容后加一個回車就OK)

(3) 一定有空格的地方

key: value 在分號后面一定要寫寫一個空格

四.怎樣使用jar包中的類

還是寫個小例子吧煮甥,這樣直觀!

publicfinalclassPerson{publicstaticintage(){return30;}}

->javac Person.java->jar cvf person.jar Person.class

將上面的文件打成一個jar包

再寫一個類對其進行調用:

publicclassMyAge{publicstaticvoidgetAge(){System.out.println(Person.age());}}

->javac MyAge.java->java-classpath person.jar MyAge

感興趣的讀者可以調試一下這個程序

五.創(chuàng)建可執(zhí)行jar包

有時自己寫個程序藕赞,類一大堆成肘,時間一長連自己都不知道那個是主類,而且有可能用到圖片或其它文件一大堆斧蜕,看得也亂双霍,這時你可以考慮把它做成一個可執(zhí)行jar包…

(1) 編輯manifest.mf文件加入下面一行

1

Main-Class: MyApplet

注意:Main-Class的大小定,冒號后的空格,MyApplet后一定輸入回車惩激,然后保存店煞。

(2) 打包

1

jar cvfm FirstApplet.jar manifest.mf MyApplet.class

注意:manifest.mf指定為存放Mani-Class: MyApplet文件的class路徑(如:hello.Hello)或者文件名(applet)

(3) 可執(zhí)行jar的使用

1

java -jar FirstApplet.jar

也可以中使用:

<applet code=MyApplet archive=FirstApplet.jar width=200height=100></applet>

注意:類并沒有給出,大家隨便寫一個就行风钻,類名包名自己隨意定顷蟀,相應的更改就可以…

六.擴展自己的類

在JDK的安裝目錄\jre\lib\ext目錄下,SUN為大家為我們擴展自己類的提供了方便骡技,大家可以將自己的類文件打成.jar包放在此目錄下鸣个,它由ExtClassLoader類裝器負責進行裝載羞反,ExtClassLoader類裝器是AppClassLoader類裝載器的父裝載器,AppClassLoader主要負責加載CLASSPATH路徑下的文件囤萤,而在java中采用的又是委托父裝載器的機制昼窗,所以此目錄下存放的jar中的類文件不做任何的設置,類裝載器就可以找到正常的加載涛舍,是不是很方便啊澄惊,呵…

如果你的.jar是給applet小應用程序看的,可以在打成jar包之前富雅,在其manifest.mf加入下面兩行掸驱。

Class-Path:FirstApplet.jarClass-path:SecondApplet.jarMain-Class:MyApplet

注意:Class-path可以設置多項,直接寫jar包名既可没佑。Main-Class主要當jar中有多個.class類文件時,java并不知道那個才是主類毕贼,所以要指定,如果jar包中只有一個類當然可以不指定蛤奢。

Java調用類的順序:java\lib\ext中的類—>Manifest.mf中指定的類–>當前目錄中的類–>set CLASSPATH中指定的類鬼癣。

七.調用URL網絡上的jar包

(1) 生成jar包的URL

URL u=newURL("jar:"+"FirstAppplet.jar"+!/");

(2) 建立jarURLConnection對象

JarURLConnection juc=(JarURLConnection)u.openConnection();

(3) 返回jar包中主類的名字

Attributes attr=juc.getMainAttributes();String name=attr.getValue("Mani-Class");

一定要確保你的jar包中的manifest.mf中已正確的設置了Mani-Class屬性,再強調一下一定要注意規(guī)則啤贩。

(4) 根據(jù)得到的主類名創(chuàng)建Class對象

Classc=Class.forName(name);

(5) 根據(jù)Class對象調用其main方法:

Method cm=c.getMethod("main",newClass[]{String.class});cm.invoke(null,newObject[]{});

提示:上邊用到了Reflection反射機制的相關知識待秃,大家如果多反射機制有興趣,可查看java.lang.reflect包中的相關內容.

八.JAR命令使用技巧:

(1) jar創(chuàng)建壓ZIP文件

jar cvfM TestZIP.jar test

? 加M參數(shù)為了不生成META-INF相關內容

然后將TestZIP.jar改為TestZIP.zip就可以瓜晤,是不是很簡單….

(2) 使用WinRAR解壓.jar文件

上邊我們已經說過了锥余,說JAR文件是一種特殊的壓縮文件,所以它當然可以用我們常用的一些解壓 縮工具來解了痢掠,至于怎么解驱犹,這就不用我說了吧。

(3) 用WinRAR生成.jar文件

我們已經說過JAR包與ZIP包主要區(qū)別就是JAR包中多一個META-INF的目錄足画,META-INF目錄下有一個manifest.mf文件雄驹,我們只要建立好相關的目錄一壓縮就可以了。

目錄的結構如下:

? TestJar

? ? ? |--META-INF

? ? ? ? ? ? |--manifest.mf


老九學堂出品淹辞,轉載請私信哦

對于文章內容有不理解的可以添加老九君個人QQ:614940318医舆,請備注來自簡書

老九學堂免費C、C++象缀、Java課程地址:

https://study.163.com/courses-search?keyword=%E8%80%81%E4%B9%9D%E5%AD%A6%E5%A0%82

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蔬将,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子央星,更是在濱河造成了極大的恐慌霞怀,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件莉给,死亡現(xiàn)場離奇詭異毙石,居然都是意外死亡廉沮,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門徐矩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滞时,“玉大人,你說我怎么就攤上這事滤灯∑夯” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵力喷,是天一觀的道長刽漂。 經常有香客問我,道長弟孟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任样悟,我火速辦了婚禮拂募,結果婚禮上,老公的妹妹穿的比我還像新娘窟她。我一直安慰自己陈症,他們只是感情好,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布震糖。 她就那樣靜靜地躺著录肯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吊说。 梳的紋絲不亂的頭發(fā)上论咏,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音颁井,去河邊找鬼厅贪。 笑死,一個胖子當著我的面吹牛雅宾,可吹牛的內容都是我干的养涮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼眉抬,長吁一口氣:“原來是場噩夢啊……” “哼贯吓!你這毒婦竟也來了?” 一聲冷哼從身側響起蜀变,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤悄谐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后昏苏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尊沸,經...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡威沫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了洼专。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棒掠。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖屁商,靈堂內的尸體忽然破棺而出烟很,到底是詐尸還是另有隱情,我是刑警寧澤蜡镶,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布雾袱,位于F島的核電站,受9級特大地震影響官还,放射性物質發(fā)生泄漏芹橡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一望伦、第九天 我趴在偏房一處隱蔽的房頂上張望林说。 院中可真熱鬧,春花似錦屯伞、人聲如沸腿箩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽珠移。三九已至,卻和暖如春末融,著一層夾襖步出監(jiān)牢的瞬間钧惧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工滑潘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留垢乙,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓语卤,卻偏偏與公主長得像追逮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子粹舵,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內容