在最近,因為老師要求我總結一下有關jar命令的相關知識,所以整合了許多資料,作了以下的總結:
1.
Jar
檔案包:
JAR 檔案就是 Java Archive File,是 Java 的一種文檔格式。JAR 檔案非常類似 ZIP 檔案,更準確的說,它就是 ZIP 檔案,所以叫它檔案包。JAR 檔案與 ZIP 檔案唯一的區別就是在 JAR 檔案的內容中,包含了一個 META-INF/MANIFEST.MF 檔案,這個檔案是在產生 JAR 檔案的時候自動建立的。
2.
建立
jar
檔案包:
Jar檔案包分為兩類:可執行jar檔案包和不可執行檔jar檔案包。它們的區別是jar檔案包裡META-INF/MANIFEST.MF檔案是否jar指定了包含入口函數public static void main(String[]) 方法的主類。至於如何編寫MANIFEST.MF,下文會提及。 2.1
建立不可執行檔
jar
檔案包:
如果你建立一個jar檔案包,僅僅用於打包你的.class位元組碼檔案,不需要它們直接雙擊就能啟動並執行話或者要打包一些不含主類的.class位元組碼檔案,那麼你可以建立不可執行檔jar檔案包。 jar cvf [jar包檔案名稱] [要打包的.class檔案或包含全部.class檔案的檔案夾] 例2-1:jar cvf test.jar X.class Y.class 打包過後jar包裡包含META-INF檔案夾,而該檔案夾裡有MANIFEST.MF,這都是自動被建立的;而與META-INF檔案夾同級目錄下則包含了被打包的X.class和 Y.class。 例2-2:jar cvf test.jar bao 打包過後, jar包裡包含META-INF檔案夾,而該檔案夾裡有MANIFEST.MF,這都是自動被建立的;而與META-INF檔案夾同級目錄下則包含了檔案夾bao。 2.2
建立可執行檔
jar
檔案包:
製作一個可執行檔 JAR 檔案包來發布你的程式是 JAR 檔案包最典型的用法。建立可執行檔 JAR 檔案包,需要使用帶 cvfm 參數的 jar 命令(這是建立可執行jar檔案包一般使用的參數,下文會對參數有詳細的解釋),命令的格式如下:jar cvfm [jar包檔案名稱] manifest.mf [要打包的.class檔案或包含全部.class檔案的包] 例2-3:jar cvfm test.jar manifest.mf X.class Y.class 打包後的目錄結構與2.1相同,但是最大的區別是在jar檔案包的META-INF/MANIFEST.MF中指明了主類。那麼就要求我們在打包之前先建立一個自己的MANIFEST.MF。而在 MANIFEST.MF 中書寫格式如下(假設X.class為主類): Main-Class: 可執行主類全名(包含包名) <斷行符號> 例如:Main-Class: X<斷行符號符>
注意:MANIFEST 中書寫的關鍵在於Main-Class:與可執行主類全名(包含包名)要留一空格,而且必須以一空行結束,即是以一個斷行符號符結束。除此之外,建立的 JAR 檔案包中需要包含完整的、與 Java 程式的包結構對應的目錄結構。而 Main-Class 指定的類,也必須是完整的、包含包路徑的類名。繼續以上面為例,假設X.class和Y.class都在包bao中,並且X.class為主類例2-4:建立jar包的命令為: jar cvfm test.jar manifest.mf bao而在manifest.mf 中書寫為: Main-Class: bao.X<斷行符號符>打包過後, jar包裡包含META-INF檔案夾,而該檔案夾裡有MANIFEST.MF,這都是自動被建立的;而與META-INF檔案夾同級目錄下則包含了包bao。 運行可執行jar檔案包,可直接雙擊jar檔案包,或在命令列中輸入 java –jar [要啟動並執行jar檔案包],或者建立一個.bar批次檔,內容編輯為java –jar [要啟動並執行jar檔案包],放在與jar檔案夾同一目錄下,直接雙擊該檔案也可運行
3.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命令的使用方法:
例3-1:jar cf test.jar bao該命令沒有列印壓縮的執行過程,執行結果是在目前的目錄產生了 test.jar 檔案。而且jar包裡包含META-INF檔案夾,而該檔案夾裡有MANIFEST.MF,這都是自動被建立的;而與META-INF檔案夾同級目錄下則包含了檔案夾bao。
例3-2
:jar cvf test.jar bao該命令與上例中的結果相同,但是由於 v 參數的作用,顯示出了打包過程。
例3-3
:jar cvfM test.jar bao該命令與例3-2結果類似,但在產生的 test.jar 中沒有包含 META-INF/MANIFEST 檔案,也有列印出壓縮的執行過程。
例3-4
:jar cvfm test.jar manifest.mf bao運行結果與例3-2相似,列印資訊也相同,只是產生 JAR 包中的 META-INF/MANIFEST 內容不同,是包含了 manifest.mf 的內容
例3-5
:jar tf test.jar在 test.jar 已經存在的情況下,可以查看 test.jar 中的內容,結果如下:META-INF/META-INF/MANIFEST.MFbao/X.class
例3-6
:jar tvf test.jar除顯示中例3-5顯示的內容外,還包括包內檔案的詳細資料,如:0 Fri May 19 15:39:06 GMT 2010 META-INF/ 86 Fri May 19 15:39:06 GMT 2010 META-INF/MANIFEST.MF 0 Fri May 19 15:39:06 GMT 2010 bao/ 7 Fri May 19 15:39:06 GMT 2010 bao/X.class
例3-7
:jar xf test.jar解壓test.jar 到目前的目錄,不列印任何資訊。
例3-8
:jar xvf test.jar解壓test.jar 到目前的目錄,列印解壓過程的詳細資料。
例3-9
:jar uf test.jar Y.class在 test.jar 中添加了檔案Y.class
例3-10
:jar uvf test.jar Y.class與例3-9結果相同,同時有詳細資料顯示。