轉載至程式先鋒技術維客[url]www.javabiz.cn[/url] 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 8) 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