亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

JAR文件包及jar命令詳解

2019-11-18 11:10:36
字體:
來源:轉載
供稿:網友

經常在網上看到有人詢問:如何把 java 程序編譯成 .exe 文件。通?;卮鹬挥袃煞N,一種是制作一個可執行的 JAR 文件包,然后就可以像.chm 文檔一樣雙擊運行了;而另一種是使用 JET 來進行 編譯。但是 JET 是要用錢買的,而且據說 JET 也不是能把所有的 Java 程序都編譯成執行文件,性能也要打些折扣。所以,使用制作可執行 JAR 文件包的方法就是最佳選擇了,何況它還能保持Java 的跨平臺特性。

下面就來看看什么是 JAR 文件包吧:

1. JAR 文件包

JAR 文件就是 Java Archive File,顧名思意,它的應用是與 Java 息息相關的,是 Java 的一種文檔格式。JAR 文件非常類似 Zip 文件——準確的說,它就是 ZIP 文件,所以叫它文件包。JAR 文件與 ZIP 文件唯一的區別就是在 JAR 文件的內容中,包含了一個 META-INF/MANIFEST.MF 文件,這個文件是在生成 JAR 文件的時候自動創建的。舉個例子,假如我們具有如下目錄結構的一些文件:

==

`-- test

  `-- Test.class

把它壓縮成 ZIP 文件 test.zip,則這個 ZIP 文件的內部目錄結構為:

test.zip

`-- test

  `-- Test.class

假如我們使用 JDK 的 jar 命令把它打成 JAR 文件包 test.jar,則這個 JAR 文件的內部目錄結構為:

test.jar

-- META-INF

  `-- MANIFEST.MF

`-- test

`--Test.class

2. 創建可執行的 JAR 文件包

制作一個可執行的 JAR 文件包來發布你的程序是 JAR 文件包最典型的用法。

Java 程序是由若干個 .class 文件組成的。這些 .class 文件必須根據它們所屬的包不同而分級分目錄存放;運行前需要把所有用到的包的根目錄指定給 CLASSPATH 環境變量或者 java 命令的 -cp 參數;運行時還要到控制臺下去使用 java 命令來運行,假如需要直接雙擊運行必須寫 Windows 的批處理文件 (.bat) 或者 linux 的 Shell 程序。因此,許多人說,Java 是一種方便開發者苦了用戶的程序設計語言。

其實不然,假如開發者能夠制作一個可執行的 JAR 文件包交給用戶,那么用戶使用起來就方便了。在 Windows 下安裝 JRE (Java Runtime Environment) 的時候,安裝文件會將 .jar 文件映射給 javaw.exe 打開。那么,對于一個可執行的 JAR 文件包,用戶只需要雙擊它就可以運行程序了,和閱讀 .chm 文檔一樣方便 (.chm 文檔默認是由 hh.exe 打開的)。那么,現在的要害,就是如何來創建這個可執行的 JAR 文件包。

創建可執行的 JAR 文件包,需要使用帶 cvfm 參數的 jar 命令,同樣以上述 test 目錄為例,命令如下:

jar cvfm test.jar manifest.mf test

這里 test.jar 和 manifest.mf 兩個文件,分別是對應的參數 f 和 m,其重頭戲在 manifest.mf。因為要創建可執行的 JAR 文件包,光靠指定一個 manifest.mf 文件是不夠的,因為 MANIFEST 是 JAR 文件包的特征,可執行的 JAR 文件包和不可執行的 JAR 文件包都包含 MANIFEST。要害在于可執行 JAR 文件包的 MANIFEST,其內容包含了 Main-Class 一項。這在 MANIFEST 中書寫格式如下:

Main-Class: 可執行主類全名(包含包名)

例如,假設上例中的 Test.class 是屬于 test 包的,而且是可執行的類 (定義了 public static void main(String[]) 方法),那么這個 manifest.mf 可以編輯如下:

Main-Class: test.Test <回車>

這個 manifest.mf 可以放在任何位置,也可以是其它的文件名,只需要有 Main-Class: test.Test 一行,且該行以一個回車符結束即可。創建了 manifest.mf 文件之后,我們的目錄結構變為:

==

-- test

  `-- Test.class

`-- manifest.mf

這時候,需要到 test 目錄的上級目錄中去使用 jar 命令來創建 JAR 文件包。也就是在目錄樹中使用“==”表示的那個目錄中,使用如下命令:

jar cvfm test.jar manifest.mf test

之后在“==”目錄中創建了 test.jar,這個 test.jar 就是執行的 JAR 文件包。運行時只需要使用 java -jar test.jar 命令即可。

需要注重的是,創建的 JAR 文件包中需要包含完整的、與 Java 程序的包結構對應的目錄結構,就像上例一樣。而 Main-Class 指定的類,也必須是完整的、包含包路徑的類名,如上例的 test.Test;而且在沒有打成 JAR 文件包之前可以使用 java <類名> 來運行這個類,即在上例中 java test.Test 是可以正確運行的 (當然要在 CLASSPATH 正確的情況下)。

3. jar 命令詳解

jar 是隨 JDK 安裝的,在 JDK 安裝目錄下的 bin 目錄中,Windows 下文件名為 jar.exe,Linux 下文件名為 jar。它的運行需要用到 JDK 安裝目錄下 lib 目錄中的 tools.jar 文件。不過我們除了安裝 JDK 什么也不需要做,因為 SUN 已經幫我們做好了。我們甚至不需要將 tools.jar 放到 CLASSPATH 中。

使用不帶任何的 jar 命令我們可以看到 jar 命令的用法如下:

jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目錄] 文件名 ...

其中 {ctxu} 是 jar 命令的子命令,每次 jar 命令只能包含 ctxu 中的一個,它們分別表示:

 -c 創建新的 JAR 文件包

 -t 列出 JAR 文件包的內容列表

 -x 展開 JAR 文件包的指定文件或者所有文件

 -u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中)

 [vfm0M] 中的選項可以任選,也可以不選,它們是 jar 命令的選項參數

 -v 生成具體報告并打印到標準輸出

 -f 指定 JAR 文件名,通常這個參數是必須的

 -m 指定需要包含的 MANIFEST 清單文件

 -0 只存儲,不壓縮,這樣產生的 JAR 文件包會比不用該參數產生的體積大,但速度更快

 -M 不產生所有項的清單(MANIFEST〕文件,此參數會忽略 -m 參數

 [jar-文件] 即需要生成、查看、更新或者解開的 JAR 文件包,它是 -f 參數的附屬參數

 [manifest-文件] 即 MANIFEST 清單文件,它是 -m 參數的附屬參數

 [-C 目錄] 表示轉到指定目錄下去執行這個 jar 命令的操作。它相當于先使用 cd 命令轉該目錄下再執行不帶 -C 參數的 jar 命令,它只能在創建和更新 JAR 文件包的時候可用。

文件名 ... 指定一個文件/目錄列表,這些文件/目錄就是要添加到 JAR 文件包中的文件/目錄。假如指定了目錄,那么 jar 命令打包的時候會自動把該目錄中的所有文件和子目錄打入包中。

下面舉一些例子來說明 jar 命令的用法:

1) jar cf test.jar test

該命令沒有執行過程的顯示,執行結果是在當前目錄生成了 test.jar 文件。假如當前目錄已經存在 test.jar,那么該文件將被覆蓋。

2) jar cvf test.jar test

該命令與上例中的結果相同,但是由于 v 參數的作用,顯示出了打包過程,如下:

標明清單(manifest)

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

增加:test/Test.class(讀入= 7) (寫出= 6)(壓縮了 14%)

3) jar cvfM test.jar test

該命令與 2) 結果類似,但在生成的 test.jar 中沒有包含 META-INF/MANIFEST 文件,打包過程的信息也略有差別:

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

增加:test/Test.class(讀入= 7) (寫出= 6)(壓縮了 14%)

4) jar cvfm test.jar manifest.mf test

運行結果與 2) 相似,顯示信息也相同,只是生成 JAR 包中的 META-INF/MANIFEST 內容不同,是包含了 manifest.mf 的內容

5) jar tf test.jar

在 test.jar 已經存在的情況下,可以查看 test.jar 中的內容,如對于 2) 和 3) 生成的 test.jar 分別應該此命令,結果如下;

對于 2)

META-INF/

META-INF/MANIFEST.MF

test/

test/Test.class

對于 3)

test/

test/Test.class

6) jar tvf test.jar

除顯示 5) 中顯示的內容外,還包括包內文件的具體信息,如:

0 Wed Jun 19 15:39:06 GMT 2002 META-INF/

86 Wed Jun 19 15:39:06 GMT 2002 META-INF/MANIFEST.MF

0 Wed Jun 19 15:33:04 GMT 2002 test/

7 Wed Jun 19 15:33:04 GMT 2002 test/Test.class

7) jar xf test.jar

解開 test.jar 到當前目錄,不顯示任何信息,對于 2) 生成的 test.jar,解開后的目錄結構如下:

==

-- META-INF

  `-- MANIFEST

`-- test

`--Test.class

jar xvf test.jar

運行結果與 7) 相同,對于解壓過程有具體信息顯示,如:

創建:META-INF/

展開:META-INF/MANIFEST.MF

創建:test/

展開:test/Test.class

9) jar uf test.jar manifest.mf

在 test.jar 中添加了文件 manifest.mf,此使用 jar tf 來查看 test.jar 可以發現 test.jar 中比原來多了一個 manifest。這里順便提一下,假如使用 -m 參數并指定 manifest.mf 文件,那么 manifest.mf 是作為清單文件 MANIFEST 來使用的,它的內容會被添加到 MANIFEST 中;但是,假如作為一般文件添加到 JAR 文件包中,它跟一般文件無異。

10) jar uvf test.jar manifest.mf

與 9) 結果相同,同時有具體信息顯示,如:

增加:manifest.mf(讀入= 17) (寫出= 19)(壓縮了 -11%)

4. 關于 JAR 文件包的一些技巧

1) 使用 unzip 來解壓 JAR 文件

在介紹 JAR 文件的時候就已經說過了,JAR 文件實際上就是 ZIP 文件,所以可以使用常見的一些解壓 ZIP 文件的工具來解壓 JAR 文件,如 Windows 下的 WinZip、WinRAR 等和 Linux 下的 unzip 等。使用 WinZip 和 WinRAR 等來解壓是因為它們解壓比較直觀,方便。而使用 unzip,則是因為它解壓時可以使用 -d 參數指定目標目錄。

在解壓一個 JAR 文件的時候是不能使用 jar 的 -C 參數來指定解壓的目標的,因為 -C 參數只在創建或者更新包的時候可用。那么需要將文件解壓到某個指定目錄下的時候就需要先將這具 JAR 文件拷貝到目標目錄下,再進行解壓,比較麻煩。假如使用 unzip,就不需要這么麻煩了,只需要指定一個 -d 參數即可。如:

unzip test.jar -d dest/

2) 使用 WinZip 或者 WinRAR 等工具創建 JAR 文件

上面提到 JAR 文件就是包含了 META-INF/MANIFEST 的 ZIP 文件,所以,只需要使用 WinZip、WinRAR 等工具創建所需要 ZIP 壓縮包,再往這個 ZIP 壓縮包中添加一個包含 MANIFEST 文件的 META-INF 目錄即可。對于使用 jar 命令的 -m 參數指定清單文件的情況,只需要將這個 MANIFEST 按需要修改即可。

3) 使用 jar 命令創建 ZIP 文件

有些 Linux 下提供了 unzip 命令,但沒有 zip 命令,所以需要可以對 ZIP 文件進行解壓,即不能創建 ZIP 文件。如要創建一個 ZIP 文件,使用帶 -M 參數的 jar 命令即可,因為 -M 參數表示制作 JAR 包的時候不添加 MANIFEST 清單,那么只需要在指定目標 JAR 文件的地方將 .jar 擴展名改為 .zip 擴展名,創建的就是一個不折不扣的 ZIP 文件了,如將上一節的第 3) 個例子略作改動:

jar cvfM test.zip test



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91美女片黄在线观看游戏| 久久精品99久久香蕉国产色戒| 国产精品久久久久久五月尺| 日韩美女av在线| 91成人福利在线| 最好看的2019年中文视频| 在线成人免费网站| 国产成人在线一区| 欧美多人爱爱视频网站| 欧美成人免费一级人片100| 91精品国产综合久久香蕉的用户体验| 亚洲大胆人体av| 亚洲国产精品系列| 日韩在线观看视频免费| 亚洲人成在线观看| 91wwwcom在线观看| 少妇精69xxtheporn| 成人免费高清完整版在线观看| 欧美日韩在线看| 按摩亚洲人久久| 日韩精品亚洲元码| 亚洲色图50p| 另类视频在线观看| 国产精选久久久久久| 亚洲精品mp4| 国产精欧美一区二区三区| 日韩亚洲第一页| 国产精品久久久久久久久久久久| 亚洲精品按摩视频| 69久久夜色精品国产69乱青草| 日韩av一区在线观看| 欧美成人第一页| 另类专区欧美制服同性| 精品国产一区久久久| 久久精品久久久久久国产 免费| 亚洲a级在线观看| 欧美精品激情在线| 国产精品久久久久免费a∨大胸| 久久久久久久久久亚洲| 91精品国产高清自在线| 美日韩丰满少妇在线观看| 久久成人亚洲精品| 亚洲色图五月天| 国产精品美女久久久久av超清| 国内精品久久影院| 日韩成人av在线播放| 国产69精品久久久久9999| 国产精品视频一区国模私拍| 亚洲无av在线中文字幕| 国产原创欧美精品| 精品久久香蕉国产线看观看gif| www.亚洲一二| 欧美国产第一页| 国产精品亚洲美女av网站| 久久夜精品香蕉| 在线播放日韩专区| 久久综合色88| 大桥未久av一区二区三区| 亚洲国产精品yw在线观看| 亚洲精品黄网在线观看| 九九热这里只有精品6| 国产成人+综合亚洲+天堂| 欧美亚洲激情在线| 欧美极度另类性三渗透| 中文字幕日本欧美| 欧美成人午夜剧场免费观看| 欧美精品18videosex性欧美| 欧美精品精品精品精品免费| 91精品国产综合久久久久久蜜臀| 成人h猎奇视频网站| 欧美午夜激情小视频| 久久精品99久久久久久久久| 久久亚洲春色中文字幕| 国产高清在线不卡| 日韩成人小视频| 成人av在线天堂| 国产丝袜一区二区三区| 国产精自产拍久久久久久蜜| 国产成人免费91av在线| 亚洲黄页网在线观看| 欧美成人亚洲成人| 亚洲女成人图区| 精品毛片三在线观看| 欧美影院在线播放| 亚洲国产精品专区久久| www.欧美视频| 日韩一级裸体免费视频| 在线视频日韩精品| 国产午夜精品一区二区三区| 日韩在线精品视频| 久久免费视频这里只有精品| 精品美女永久免费视频| 久久躁狠狠躁夜夜爽| 91精品国产电影| 欧美综合激情网| 91免费人成网站在线观看18| 欧美激情乱人伦| 欧美—级高清免费播放| 亚洲qvod图片区电影| 国产精品久久9| 亚洲精品综合精品自拍| 久久久久久久久久国产| 亚洲a一级视频| 色多多国产成人永久免费网站| 日韩资源在线观看| 91精品国产电影| 亚洲精品xxxx| 福利视频一区二区| 久久91亚洲精品中文字幕| 日韩视频―中文字幕| 亚洲综合在线做性| 国产一区二区在线免费| 久久久精品国产网站| 成人xxxx视频| 日韩激情视频在线| 欧美精品精品精品精品免费| 88国产精品欧美一区二区三区| 久久亚洲春色中文字幕| 精品综合久久久久久97| 久久精品在线播放| 国产视频一区在线| 欧美精品videos另类日本| 欧美日韩中文在线观看| 国产精品99免视看9| 日韩精品在线播放| 91经典在线视频| 国产精品久久在线观看| 国产97在线|亚洲| 国产欧美日韩最新| 国产精品wwww| 亚洲аv电影天堂网| 国产精品∨欧美精品v日韩精品| 一本色道久久综合亚洲精品小说| 亚洲欧美日韩国产中文| 清纯唯美亚洲激情| 欧美在线视频免费播放| 精品亚洲男同gayvideo网站| 亚洲人成毛片在线播放| 欧美成人免费一级人片100| 欧美亚州一区二区三区| 久久91精品国产91久久跳| 亚洲国产欧美一区二区三区久久| 亚洲精品91美女久久久久久久| 久久夜色精品国产| y97精品国产97久久久久久| 成人中心免费视频| 欧美成人免费播放| 国产激情999| 欧美黄色片免费观看| 亚洲欧美日韩精品久久亚洲区| 日韩一二三在线视频播| 国产精品三级在线| 黄色91在线观看| 欧美成人一区在线| 欧美日韩美女在线观看| 91视频九色网站| 在线电影欧美日韩一区二区私密| 亚洲级视频在线观看免费1级| 精品露脸国产偷人在视频| 日本19禁啪啪免费观看www| 91免费人成网站在线观看18| 日韩在线观看成人| 奇米一区二区三区四区久久| 亚洲综合在线做性|