jar命令淺談
?JAR文件的全稱是Java Archive File尝苇,意思是java檔案文件蒸辆,通常JAR文件是一種壓縮文件治拿,并且與常見(jiàn)的Zip文件兼容,兩者的區(qū)別便是JAR擁有清單文件 (META-INF/MANIFEST.MF)捷绑,這個(gè)文件是生成JAR文件時(shí)自動(dòng)創(chuàng)建的韩脑。
?jar在安裝JDK時(shí)會(huì)自動(dòng)安裝,在bin目錄里面粹污,Windows里是jar.exe段多,Lunix里是jar。
?首先輸入jar命令壮吩,系統(tǒng)會(huì)自動(dòng)提示jar命令的用法进苍。(運(yùn)行dos命令使用的是Cmder軟件,代碼前面的“λ”不用輸入)
λ jar
用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
選項(xiàng):
-c 創(chuàng)建新檔案
-t 列出檔案目錄
-x 從檔案中提取指定的 (或所有) 文件
-u 更新現(xiàn)有檔案
-v 在標(biāo)準(zhǔn)輸出中生成詳細(xì)輸出
-f 指定檔案文件名
-m 包含指定清單文件中的清單信息
-n 創(chuàng)建新檔案后執(zhí)行 Pack200 規(guī)范化
-e 為捆綁到可執(zhí)行 jar 文件的獨(dú)立應(yīng)用程序
指定應(yīng)用程序入口點(diǎn)
-0 僅存儲(chǔ); 不使用任何 ZIP 壓縮
-P 保留文件名中的前導(dǎo) '/' (絕對(duì)路徑) 和 ".." (父目錄) 組件
-M 不創(chuàng)建條目的清單文件
-i 為指定的 jar 文件生成索引信息
-C 更改為指定的目錄并包含以下文件
如果任何文件為目錄, 則對(duì)其進(jìn)行遞歸處理鸭叙。
清單文件名, 檔案文件名和入口點(diǎn)名稱的指定順序
與 'm', 'f' 和 'e' 標(biāo)記的指定順序相同觉啊。
示例 1: 將兩個(gè)類文件歸檔到一個(gè)名為 classes.jar 的檔案中:
jar cvf classes.jar Foo.class Bar.class
示例 2: 使用現(xiàn)有的清單文件 'mymanifest' 并
將 foo/ 目錄中的所有文件歸檔到 'classes.jar' 中:
jar cvfm classes.jar mymanifest -C foo/ .
jar文件結(jié)構(gòu)類型
舉例:
原文件目錄結(jié)構(gòu)為:
****
├ Foder
| ├file1
| ├file2
└ file3
則其生成的jar文件構(gòu)內(nèi)部目錄結(jié)構(gòu):
****.jar
├ META-INF
│ └ MANIFEST.MF(清單文件)
├ Foder
| ├file1
| └file2
└ file3
命令實(shí)例講解
1.jar cf .............
創(chuàng)建jar文件
語(yǔ)法如下:
jar cf ****.jar file1 file2 ....
?創(chuàng)建****.jar,并將file1,file2 (jar命令可以指定多個(gè)文件) 添加到****.jar包中沈贝,如****.jar存在,則覆蓋杠人。
jar cf ****.jar folderName
?創(chuàng)建****.jar,并將folderName文件夾下所有文件添加到 ****.jar包中宋下,如****.jar存在,則覆蓋嗡善。
2.jar cvf .............
創(chuàng)建jar文件,并且顯示壓縮過(guò)程
會(huì)輸出類似下面的信息学歧。
已添加清單
正在添加: lzj.iml(輸入 = 81) (輸出 = 75)(壓縮了 7%)
........
語(yǔ)法與第一個(gè)命令相似
3.jar cvfM .............
創(chuàng)建jar文件,但不添加清單文件罩引,并且顯示壓縮過(guò)程.
會(huì)輸出類似下面的信息。
正在添加: lzj.iml(輸入 = 81) (輸出 = 75)(壓縮了 7%)
........
語(yǔ)法與第一個(gè)命令相似
4.jar cvfm ...........
創(chuàng)建jar文件,自定義清單文件內(nèi)容,并且顯示壓縮過(guò)程.
語(yǔ)法:
jar cvfm ****.jar ****.mf(大小寫(xiě)皆可) FileName
在原有清單文件基礎(chǔ)上增加****.mf文件的內(nèi)容(不論名稱是什么都可以撩满,但是jar包只認(rèn)manifest.MF,所以系統(tǒng)會(huì)自動(dòng)完成轉(zhuǎn)化)
清單文件可直接編輯,但有相應(yīng)的內(nèi)容格式要求,這里不做過(guò)多介紹伺帘。
5.jar tf ............
查看jar包文件昭躺。
例如
λ jar tf lzj.jar
META-INF/
META-INF/MANIFEST.MF
lzj.iml
如果JAR包內(nèi)文件非常多可使用(命令行窗口顯示的行數(shù)有限)
jar tf lzj.jar > lzj.txt
此時(shí)將不再返回信息,文件夾下會(huì)生成一個(gè)txt文件伪嫁,里面保存著相應(yīng)的信息领炫。
加v,詳細(xì)的查看jar包文件
即jar tvf ............
例如
λ jar tvf lzj.jar
0 Sat Jul 20 16:18:02 CST 2019 META-INF/
69 Sat Jul 20 16:18:02 CST 2019 META-INF/MANIFEST.MF
81 Sun Dec 16 16:13:00 CST 2018 lzj.iml
也可生成txt文件张咳。
6.jar xf ................
解壓縮帝洪,將jar文件解壓到當(dāng)前目錄。不返回信息脚猾。
加v葱峡,即jar xvf ................
系統(tǒng)會(huì)顯示詳細(xì)的解壓過(guò)程
例如
λ jar xvf lzj.jar
已創(chuàng)建: META-INF/
已解壓: META-INF/MANIFEST.MF
已創(chuàng)建: lzj/
已創(chuàng)建: lzj/.idea/
已解壓: lzj/.idea/compiler.xml
已解壓: lzj/.idea/encodings.xml
已解壓: lzj/.idea/misc.xml
................
7.jar uf ..............
語(yǔ)法
jar uf ****.jar file
將文件加入到j(luò)ar文件中,如果有同名文件則替龙助。
加v同樣可以詳細(xì)看到過(guò)程
例如
λ jar uvf lzj.jar pom.xml
正在添加: pom.xml(輸入 = 502) (輸出 = 267)(壓縮了 46%)
jar命令擴(kuò)展
jar i ****.jar
為指定的jar文件生成索引砰奕,生成在META-INF中名稱為INDEX.LIST。