日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

JDK 命令之 jar -- 压缩/解压缩工具

發(fā)布時(shí)間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDK 命令之 jar -- 压缩/解压缩工具 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、命令介紹
  • 二、命令格式
  • 三、常用選項(xiàng)
  • 四、命令示例
    • (一)將指定目錄打成 jar 包
    • (二)將指定目錄打成 jar 包,且不生成文件 META-INF/MANIFEST.MF
    • (三)打包時(shí)指定文件 MANIFEST.MF
    • (四)查看 jar 包的內(nèi)容
    • (五)對(duì) jar 包進(jìn)行解包
    • (六)將文件添加到已存在的 jar 包中
    • (七)切換到目錄 hello 下然后再執(zhí)行 jar 命令,相當(dāng)于將目錄 hello 下的內(nèi)容打成 jar 包
    • (八)為 jar 包生成索引文件
    • (九)將 jar 包的內(nèi)容列表輸出到指定的文件中
  • 五、注意事項(xiàng)
  • 六、jar 文件包的一些技巧
    • (一)使用 unzip 來(lái)解壓 jar 文件
    • (二)使用 Winzip 或者 WinRAR 等工具創(chuàng)建 jar 文件
    • (三)使用 jar 命令創(chuàng)建 zip 文件
  • 七、如何使用 jar 文件包

一、命令介紹

首先要明確的一點(diǎn)是 jar 包是壓縮包,它可以使用 zip/unzip 命令解壓,實(shí)際它是類(lèi) zip 的壓縮文件。

jar 是隨 JDK 安裝的,在 JDK 安裝目錄下的 bin 目錄中,Windows 下文件名為 jar.exe,Linux 下文件名為 jar。它的運(yùn)行需要用到 JDK 安裝目錄下 lib 目錄中的 tools.jar 文件。不過(guò)我們除了安裝 JDK 什么也不需要做,因?yàn)?SUN 已經(jīng)幫我們做好了。我們甚至不需要將 tools.jar 放到環(huán)境變量 CLASSPATH 中。

jar 包中有一個(gè)文件 META-INF\MANIFEST.MF,當(dāng)你生成 jar 包時(shí),它會(huì)自動(dòng)生成。

欲了解文件 META-INF\MANIFEST.MF 的詳細(xì)內(nèi)容,猛戳《Java 打 jar 包時(shí),MANIFEST.MF 文件詳解》

二、命令格式

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

其中 {c t x u} 這四個(gè)選項(xiàng)必須選其一。[v f m e 0 M i ] 則是可選項(xiàng),文件名也是必須的。

三、常用選項(xiàng)

選項(xiàng)說(shuō)明
-c創(chuàng)建一個(gè) jar 包
-t顯示 jar 中的內(nèi)容列表
-x解壓 jar 包,即展開(kāi) jar 文件包的指定文件或者所有文件
-u添加文件到 jar 包中,即更新已存在的 jar 文件包
-f指定jar包的文件名,通常這個(gè)選項(xiàng)是必須的
-v生成詳細(xì)的報(bào)告并打印到標(biāo)準(zhǔn)輸出
-m指定 MANIFEST.MF 文件,MANIFEST.MF 文件中可以對(duì) jar 包及其中的內(nèi)容作一些一設(shè)置
-M不產(chǎn)生 MANIFEST.MF ,此選項(xiàng)會(huì)忽略 -m 選項(xiàng)
-0只打包,不壓縮,這樣產(chǎn)生的 jar 文件包會(huì)比不用該選項(xiàng)產(chǎn)生的文件包的體積大,但速度更快
-i為指定的jar文件創(chuàng)建索引文件
-C表示轉(zhuǎn)到指定目錄下去執(zhí)行這個(gè) jar 命令的操作。它相當(dāng)于先使用 cd 命令切換到該目錄下再執(zhí)行不帶 -C 參數(shù)的 jar 命令,它只能在創(chuàng)建和更新 jar 文件包的時(shí)候可用
jar-文件指定需要生成、查看、更新或者解開(kāi)的 jar 文件包,它是 -f 參數(shù)的附屬參數(shù)
manifest-文件指定 MANIFEST.MF 文件,它是 -m 參數(shù)的附屬參數(shù)
文件名...指定一個(gè)文件或者目錄列表,這些文件或者目錄就是要添加到 jar 文件包中的文件或者目錄。如果指定了目錄,那么 jar 命令打包的時(shí)候會(huì)自動(dòng)把該目錄及目錄中的所有文件和子目錄打入包中

四、命令示例

(一)將指定目錄打成 jar 包

把目錄 test 打包成 test.jar,并把 test.jar 放在當(dāng)前目錄下:

[root@linux ~]# jar -cf test.jar test [root@linux ~]# jar cf test.jar test // 不要連接線(xiàn)"-",也行

把目錄 test 打包成 test.jar,并把 test.jar 放在當(dāng)前目錄下,并顯示打包信息:

[root@linux ~]# jar cvf test.jar test

(二)將指定目錄打成 jar 包,且不生成文件 META-INF/MANIFEST.MF

使用了 M 選項(xiàng),生成的 test.jar 中則不含有 META-INF/MANIFEST.MF 文件:

[root@linux ~]# jar cvfM test.jar test

(三)打包時(shí)指定文件 MANIFEST.MF

使用 m 選項(xiàng)指定了 manifest.mf 文件:

[root@linux ~]# jar cvfm test.jar manifest.mf test

(四)查看 jar 包的內(nèi)容

使用 t 選項(xiàng)可以查看 test.jar 中的內(nèi)容:

[root@linux ~]# jar tvf test.jar # 在 test.jar

(五)對(duì) jar 包進(jìn)行解包

解開(kāi) test.jar 到當(dāng)前目錄:

[root@linux ~]# jar xf test.jar

(六)將文件添加到已存在的 jar 包中

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

[root@linux ~]# jar uf hello.jar HelloWorld.java

在 test.jar 中添加了文件 manifest.mf,但是沒(méi)有使用 -m 選項(xiàng),所以此 manifest.mf 僅僅是一個(gè)普通文件。如果使用 -m 選項(xiàng)并指定 manifest.mf 文件,那么 manifest.mf 則作為清單文件來(lái)使用的:

[root@linux ~]# jar uf test.jar manifest.mf

(七)切換到目錄 hello 下然后再執(zhí)行 jar 命令,相當(dāng)于將目錄 hello 下的內(nèi)容打成 jar 包

[root@linux ~]# jar cvfm hello.jar mymanifest.mf -C hello/

(八)為 jar 包生成索引文件

使用選項(xiàng) -i 會(huì)在 hello.jar 包的目錄 META-INF 下生成一個(gè)名為 INDEX.LIST 的索引文件,它會(huì)生成一個(gè)列表,最上邊為 jar 包名:

[root@linux ~]# jar i hello.jar

(九)將 jar 包的內(nèi)容列表輸出到指定的文件中

如果你想查看一個(gè) jar 文件包內(nèi)容列表,而這個(gè) jar 包又很大,屏幕信息會(huì)一閃而過(guò),這時(shí)你可以把列表輸出到一個(gè)文件中,方便查看:

[root@linux ~]# jar tvf hello.jar > hello.txt

五、注意事項(xiàng)

假設(shè)目錄結(jié)構(gòu)如下:

hello|--- com|--- org

你只想把 com 目錄和 org 目錄打包,而這時(shí) jar -cvf hello.jar hello/* 命令會(huì)連同 hello 目錄也一塊打包。這點(diǎn)大家要注意。jar 命令生成的壓縮文件會(huì)包含它后邊出現(xiàn)的目錄。不要含有 hello 目錄,我們應(yīng)該進(jìn)入到 hello 目錄再執(zhí)行 jar 命令。

注意:manifest.mf 這個(gè)文件名,用戶(hù)可以任意指定名稱(chēng),但 jar 命令只認(rèn)識(shí) manifest.mf,它會(huì)對(duì)用戶(hù)指定的文件名進(jìn)行相應(yīng)在的轉(zhuǎn)換,這不需用戶(hù)擔(dān)心。

六、jar 文件包的一些技巧

(一)使用 unzip 來(lái)解壓 jar 文件

jar 文件實(shí)際上就是 zip 文件,所以可以使用常見(jiàn)的一些解壓 zip 文件的工具來(lái)解壓 jar 文件,如 Windows 下的 Winzip、WinRAR 等和 Linux 下的 unzip 等。使用 Winzip 和 WinRAR 等來(lái)解壓是因?yàn)樗鼈兘鈮罕容^直觀,方便。而使用 unzip,則是因?yàn)樗鈮簳r(shí)可以使用 -d 參數(shù)指定目標(biāo)目錄。

在解壓一個(gè) jar 文件的時(shí)候是不能使用 jar 的 -C 參數(shù)來(lái)指定解壓的目標(biāo)目錄的,因?yàn)?-C 選項(xiàng)只在創(chuàng)建或者更新包的時(shí)候可用。那么需要將文件解壓到某個(gè)指定目錄下的時(shí)候就需要先將 jar 文件拷貝到目標(biāo)目錄下,再進(jìn)行解壓,比較麻煩。如果使用 unzip,就不需要這么麻煩了,只需要指定一個(gè) -d 選項(xiàng)即可。

將指定的 jar 包解壓到指定的目錄下:

[root@linux ~]# unzip test.jar -d dest/

(二)使用 Winzip 或者 WinRAR 等工具創(chuàng)建 jar 文件

實(shí)際上 jar 文件就是包含了 meta-inf/manifest.mf 的 zip 文件,所以,只需要使用 Winzip、WinRAR 等工具創(chuàng)建所需要的 zip 壓縮包,再往這個(gè) zip 壓縮包中添加 meta-inf/manifest.mf 文件即可。

(三)使用 jar 命令創(chuàng)建 zip 文件

使用帶 -M 參數(shù)的 jar 命令創(chuàng)建一個(gè) jar 文件包,將.jar 擴(kuò)展名改為 .zip 擴(kuò)展名,創(chuàng)建的就是一個(gè)不折不扣的 zip 文件包。

使用命令 jar 將指定目錄打包成一個(gè) zip 壓縮包:

[root@linux ~]# jar cvfM test.zip test

說(shuō)明:-M 參數(shù)表示制作 jar 包的時(shí)候不添加文件 META-INF/MANIFEST.MF。

七、如何使用 jar 文件包

java 文件內(nèi)容如下:

public final class Person {public static int getAge() {return 30;} }

打開(kāi)命令終端,編譯和打包:

[root@linux ~]# javac Person.java # 編譯源碼文件 [root@linux ~]# jar cvf person.jar Person.class # 將字節(jié)碼文件打包成 person.jar

再寫(xiě)一個(gè)類(lèi)對(duì)其進(jìn)行調(diào)用:

public class Test {public static void main(String[] args) {System.out.println(Person.getAge());} } [root@linux ~]# javac Test.java // 編譯源代碼文件 [root@linux ~]# java -classpath person.jar:. Test // 執(zhí)行二進(jìn)制文件 Test

說(shuō)明:

  • -classpath person.jar:. 是讓 JVM 在當(dāng)前目錄下的 person.jar 或者當(dāng)前目錄下查找需要的 class 文件,多個(gè)路徑之間使用冒號(hào) : 分隔
  • 使用選項(xiàng) -classpath,系統(tǒng)只會(huì)在指定的類(lèi)路徑中查找 Test.class,而在執(zhí)行類(lèi) Test 中的 main 方法時(shí),需要引用類(lèi) Person.class,也只會(huì)在指定的類(lèi)路徑中查找
  • person.jar 本身的路徑也要明確,本例中的 person.jar 正好也在當(dāng)前目錄中,所以直接寫(xiě) -classpath person.jar 就可以了,如果不在當(dāng)前目錄中,需要明確 jar 包的路徑,假設(shè) jar 包在當(dāng)前目錄下的子目錄 test 中,則要寫(xiě)成 -classpath ./test/person.jar
  • 如果 person.jar 和 Test.class 在同一個(gè)目錄下,可以省略選項(xiàng) -classpath,因?yàn)闆](méi)有選項(xiàng) -classpath 的情況下,JVM 默認(rèn)是在當(dāng)前工作目錄中查找類(lèi)文件:

    [root@linux ~]# java Test;

    如果這樣寫(xiě),則會(huì)報(bào)錯(cuò):

    [root@linux ~]# java -classpath person.jar Test; # 提示類(lèi) Test 找不到,因?yàn)槟阒付ㄔ谖募?person.jar 中搜索類(lèi)文件,而 person.jar 文件包中并沒(méi)有文件 Test.class

    總結(jié)

    以上是生活随笔為你收集整理的JDK 命令之 jar -- 压缩/解压缩工具的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。