jar - Java 歸檔工具
將多個檔案合并成單個 JAR 歸檔檔案。
結構
jar [ options ] [manifest] destination input-file [input-files]
說明
jar 工具是個 java 應用程式,可將多個檔案合并為單個 JAR 歸檔檔案。jar 是個多用途的存檔及壓縮公用程式,它基於 ZIP 和 ZLIB 壓縮格式。然而,設計 jar 的主要目的是便於將 java applet 或應用程式打包成單個歸檔檔案。將 applet 或應用程式的組件( .class 檔案、映像和聲音)合并成單個歸檔檔案時,可以用 java 代理(如瀏覽器)在一次 HTTP 交易處理過程中 對它們進行下載,而不是對每個組件都要求一個新串連。這大大縮短了下載時間。jar 還能壓縮檔,從而進一步提高了下載速度。此外,它允許 applet 的作者對檔案中的各個項進行簽名,因而可認證其來源。jar 工具的文法基本上與 tar 命令的文法相同。
工具是個 java 應用程式,可將多個檔案合并為單個 JAR 歸檔檔案。jar 是個多用途的存檔及壓縮公用程式,它基於 ZIP 和 ZLIB 壓縮格式。然而,設計 jar 的主要目的是便於將 java applet 或應用程式打包成單個歸檔檔案。將 applet 或應用程式的組件( .class 檔案、映像和聲音)合并成單個歸檔檔案時,可以用 java 代理(如瀏覽器)在一次 HTTP 交易處理過程中 對它們進行下載,而不是對每個組件都要求一個新串連。這大大縮短了下載時間。jar 還能壓縮檔,從而進一步提高了下載速度。此外,它允許 applet 的作者對檔案中的各個項進行簽名,因而可認證其來源。jar 工具的文法基本上與 tar 命令的文法相同。
jar 工具的輸入檔案分為三種類型:
- 資訊清單檔(可選)
- 目標 jar 檔案
- 待歸檔的檔案
通常用法是:
% jar cf myjarfile *.class
在這個樣本中,目前的目錄中的所有類檔案都被放置到名為 "myjarfile" 的檔案中。資訊清單檔由 jar 工具自動產生,並且始終是 jar 檔案的第一項。預設情況下,它被命名為 META-INF/MANIFEST.MF。資訊清單檔是儲存與歸檔有關的元資訊的地方。有關如何將元資訊儲存到資訊清單檔的詳細資料,請參閱清單規範。
如果事先已有一個資訊清單檔且希望 jar 工具將它用於新的 jar 歸檔,則可以用 -m 選項來指定它:
% jar cmf myManifestFile myJarFile *.class
清單使用 RFC822 ascii 格式,因此,很容易查看和處理“資訊清單檔”的內容。
選項
-
c
-
在標準輸出上建立新歸檔或空歸檔。
-
t
-
在標準輸出上列出內容表。
-
-
x file
-
從標準輸入提取所有檔案,或只提取指定的檔案。如果省略了 file,則提取所有檔案;否則只提取指定檔案。
-
-
f
-
第二個參數指定要處理的 jar 檔案。在
c (建立)情形中,第二個參數指的是要建立的 jar 檔案的名稱(不是在標準輸出上)。在
t(表)或
x(抽取)這兩種情形中,第二個參數指定要列出或抽取的 jar 檔案。
-
-
v
-
在標準錯誤輸出裝置上產生長格式的輸出結果。
-
-
m
-
包括指定的現有資訊清單檔中的清單資訊。用法舉例:
jar cmf myManifestFile myJarFile *.class
-
0
-
只儲存,不進行 ZIP 壓縮。
-
-
M
-
不建立項目的資訊清單檔。
-
-
u
-
通過添加檔案或更改清單來更新現有的 JAR 檔案。例如:
jar -uf foo.jar foo.class
將檔案 foo.class 添加到現有的 JAR 檔案 foo.jar 中,而
jar umf manifest foo.jar
則用 manifest 中的資訊更新 foo.jar 的清單。
-
-C
-
在執行 jar 命令期間更改目錄。例如:
jar -uf foo.jar -C classes *
將 classes 目錄內的所有檔案加到 foo.jar 中,但不添加類目錄本身。
如果有的“files”是目錄,則該目錄將被遞迴處理。
樣本
將某個特定目錄中的所有檔案加到歸檔檔案中:
$ ls0.au 3.au 6.au 9.au at_work.gif1.au 4.au 7.au Animator.class monkey.jpg2.au 5.au 8.au Wave.class spacemusic.au$ jar cvf bundle.jar *adding: 0.auadding: 1.auadding: 2.auadding: 3.auadding: 4.auadding: 5.auadding: 6.auadding: 7.auadding: 8.auadding: 9.auadding: Animator.classadding: Wave.classadding: at_work.gifadding: monkey.jpgadding: spacemusic.au$
如果您的 html 目錄中已有映像、音頻檔案和類的子目錄,可以將每個目錄歸檔到單個 jar 檔案中:
$ lsaudio classes images$ jar cvf bundle.jar audio classes imagesadding: audio/1.auadding: audio/2.auadding: audio/3.auadding: audio/spacemusic.auadding: classes/Animator.classadding: classes/Wave.classadding: images/monkey.jpgadding: images/at_work.gif$ ls -ltotal 142drwxr-xr-x 2 brown green 512 Aug 1 22:33 audio-rw-r--r-- 1 brown green 68677 Aug 1 22:36 bundle.jardrwxr-xr-x 2 brown green 512 Aug 1 22:26 classesdrwxr-xr-x 2 brown green 512 Aug 1 22:25 images$
然後可以用 jar 工具和 "t" 選項查看 jarfile 中的項名:
$ lsaudio bundle.jar classes images$ jar tf bundle.jarMETA-INF/MANIFEST.MFaudio/1.auaudio/2.auaudio/3.auaudio/spacemusic.auclasses/Animator.classclasses/Wave.classimages/monkey.jpgimages/at_work.gif$
用長格式進行列舉(用 "v" 選項)將顯示歸檔檔案中各檔案的更為詳細的資訊,例如各檔案的大小和上次修改時間:
$ jar tvf bundle.jar 145 Thu Aug 01 22:27:00 PDT 1996 META-INF/MANIFEST.MF 946 Thu Aug 01 22:24:22 PDT 1996 audio/1.au 1039 Thu Aug 01 22:24:22 PDT 1996 audio/2.au 993 Thu Aug 01 22:24:22 PDT 1996 audio/3.au 48072 Thu Aug 01 22:24:23 PDT 1996 audio/spacemusic.au 16711 Thu Aug 01 22:25:50 PDT 1996 classes/Animator.class 3368 Thu Aug 01 22:26:02 PDT 1996 classes/Wave.class 12809 Thu Aug 01 22:24:48 PDT 1996 images/monkey.jpg 527 Thu Aug 01 22:25:20 PDT 1996 images/at_work.gif$