經常在網上看到有人詢問:如何把 java 程序編譯成 .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.zp `-- test `-- Test.class
假如我們使用 JDK 的 jar 命令把它打成 JAR 文件包 test.jar,則這個 JAR 文件的內部目 錄結構為:
test.jar -- META-INF `-- MANIFEST.MF `-- test `--Test.class
其實不然,假如開發者能夠制作一個可執行的 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 可以編輯如下:
[-C 目錄] 表示轉到指定目錄下去執行這個 jar 命令的操作。它相當于先使用 cd 命令轉該 目錄下再執行不帶 -C 參數的 jar 命令,它只能在創建和更新 JAR 文件包的時候可用。 文件名 ... 指定一個文件/目錄列表,這些文件/目錄就是要添加到 JAR 文件包中的文件/目 錄。假如指定了目錄,那么 jar 命令打包的時候會自動把該目錄中的所有文件和子目錄打入包 中。