本文實例講述了java產生jar套件的方法,是非常實用的技巧。分享給大家供大家參考。具體分析如下:
很多Java初學者都會有這樣的疑問:Java編寫的application程式是否能夠最終形成一個類似exe一樣的可執行文件,難道就只能用命令列運行?
通常來說有兩種方法,一種是製作一個可執行的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 正確的情況下)。
希望本文所述對大家的Java程式設計有幫助。