1. 程式人生 > >【轉】JAR檔案包及命令的使用

【轉】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 

相關推薦

JAR檔案命令的使用

1.   JAR   檔案包      JAR   檔案就是   Java   Archive   File,顧名思意,它的應用是與   Java   息息相關的,是   Java   的一種文件格式。JAR   檔案非常類似   ZIP   檔案——準確的說,它就是  

jar和war的介紹和區別

lac rep 理解 j2e 浪費時間 需要 適合 格式 nbsp JavaSE程序可以打包成Jar包(J其實可以理解為Java了),而JavaWeb程序可以打包成war包(w其實可以理解為Web了)。然後把war發布到Tomcat的webapps目錄下,Tomcat會在啟

將cmd中的命令輸出儲存為txt文字檔案

在使用Windows XP中的cmd.exe工具時,有時候我們想要把我們的輸入命令及結果儲存起來,我們可將命令執行的結果輸出到文字檔案。在你輸入的命令後再加上>和你想儲存的檔案地址和名字就可以了。例如:將Ping命令的執行結果輸出到D盤的ping.txt文字檔案。在提示

jar檔案jar命令詳解

JAR檔案包及jar命令詳解常常在網上看到有人詢問:如何把 java 程式編譯成 .exe 檔案。通常回答只有兩種,一種是製作一個可執行的 JAR 檔案包,然後就可以像.chm 文件一樣雙擊運行了;而另一種是使用 JET 來進行 編譯。但是 JET 是要用錢買的,而且據說 J

FatFS檔案系統介紹使用例程

FatFS檔案系統包含了檔案 ff.h         :檔案系統實現標頭檔案,定義有檔案系統所需的資料結構 diskio.h  :底層驅動標頭檔案,就一些狀態巨集的定義和底層驅動函式的申明 integer.h:僅實現資料型別重定義,增加系統的可移植性 ffcon

linux之cp/scp命令+scp命令詳解

特殊 是否 用戶登錄 usr 指定 highlight 顯示 檔案 三種 linux之cp/scp命令+scp命令詳解 名稱:cp 使用權限:所有使用者 使用方式: cp [options] source dest cp [options] source

Mac環境下svn命令行的使用

資源庫 帳號 之間 rto 有效 write rac update pac 轉載地址:http://blog.csdn.net/itianyi/article/details/8981989 在Windows環境中,我們一般使用TortoiseSVN來搭建svn環境。

event.keyCode用法列表

strong page ets cells 不支持 和數 jump fire 靜音 event.keyCode用法及列表 HTML 用戶名:<input type="text" id="UserAccount" onKeyPress="JumpByEnter(

Linux安裝HDF5遇到的問題總結

inf 遇到 upload 詳細步驟 iframe gunzip 總結 comm box Linux安裝HDF5及遇到的問題總結 轉自: http://www.linuxdiyf.com/linux/26164.html ubuntu版

MySQL使用者管理SQL語句詳解

【轉】MySQL使用者管理及SQL語句詳解 1.1 MySQL使用者管理 1.1.1 使用者的定義   使用者名稱+主機域 mysql> select user,host,password from mysql.user; +--------+------------+---------

linux--- linux檔案操作常用命令

命令格式: 命令  -選項  引數  eg:            ls  -l home(顯示home下的檔案並顯示其許可權)  ls -a home(顯示ho

遠端倉庫git 常用命令與原理

我每天使用 Git ,但是很多命令記不住。 一般來說,日常使用只要記住下圖6個命令,就可以了。但是熟練使用,恐怕要記住60~100個命令。 下面是我整理的常用 Git 命令清單。幾個專用名詞的譯名如下。 Workspace:工作區 Index / Sta

nginx檔案、時間單位

計量大小的單位: bytes, kilobytes(字尾為 k 或 K), megabytes(字尾為 m 或 M), 例如:“1024”, “8k”, “1m”. 時間單位: ms milliseconds 毫秒 s seconds m minutes h

TCP粘問題解決方法之\n\r

該方案,每次讀取時當讀到‘\n’換行符時,讀取該行 伺服器端: [cpp]  view plain  copy #include<uni

kafka-檔案儲存機制詳解

文章轉自“美團技術部落格”:https://tech.meituan.com/ Kafka是什麼 Kafka是最初由Linkedin公司開發,是一個分散式、分割槽的、多副本的、多訂閱者,基於zookeeper協調的分散式日誌系統(也可以當做MQ系統),常見可以用於web

Linux定時任務Crontab命令詳解

本文轉自:https://www.cnblogs.com/intval/p/5763929.html linux 系統則是由 cron (crond) 這個系統服務來控制的。Linux 系統上面原本就有非常多的計劃性工作,因此這個系統服務是預設啟動的。另 外, 由於使用者自己也可以

linux日誌分析常用命令大全

1、檢視當天有多少個IP訪問: awk '{print $1}' log_file|sort|uniq|wc –l 2、檢視某一個頁面被訪問的次數: grep "/index.PHP" log_file | wc –l 3、檢視每一個IP訪問了多少個頁面: awk '

GDB除錯精粹使用例項

一:列檔案清單 1. List (gdb) list line1,line2 二:執行程式 要想執行準備除錯的程式,可使用run命令,在它後面可以跟隨發給該程式的任何引數,包括標準輸入和標準輸出說明符(<和>)和外殼萬用字元(*、?、[、])在內。 如果你使用不帶引數的run命令,gdb就再次使用

Fiddler抓教程

-o 設置斷點 分享 默認 afa 接口 web 文檔 篡改 Fiddler簡介 簡單地講就是一個抓包工具,或者是叫做網絡嗅探器,把網絡傳輸的數據抓取下來進行分析、Debug。 它可以對常用的瀏覽器:IE、Chrome、Firefox、Safari 等進行抓包,支

英語動詞的“物”和“不及物”,為什麽不好懂?

分享圖片 功能 wdm page smp 例如 圖片 res bsp 關於英語中的實義動詞,按照能不能直接跟賓語的標準,可以分為兩類---及物動詞和不及物動詞兩大類,很多學生在聽到老師說“及物”、“不及物”的時候,就會蒙圈,原