1. 程式人生 > >工具--將java專案JAR包打包成.exe程式

工具--將java專案JAR包打包成.exe程式

說明:
                最近學java的GUI程式設計,一時心血來潮,想把寫的小介面程式生成.exe桌面應用程式,可想法簡單做起來卻遇到了始料未及的許多問題,走了許多彎路。為大家避免同樣的錯誤,我將我使用的也是較為常用的方法整理在此,供大家一同學習!

工具:eclipse(或其他能生成JAR包的工具)、exe4j(用於將JAR打包成.exe程式)

步驟:
        第一步:生成JAR包。
                    1、在編寫好的工程資料夾上右鍵,選擇"Export"匯出項,依次點選Java——JAR file——next;
                    2、選擇需要匯出的工程資料夾,右側的.classPath和.project檔案預設勾選,可以取消。下面的設定JAR File(匯出目的地),選擇或輸入一個目的地資料夾,再在其後加新增匯出後的JAR的檔名,如:D:\java程式\計算器.jar,其他項預設,點選next繼續設定細節或直接finish。(建議直接finish,簡便易行。)
                    注:關鍵在於設定匯出路徑與jar檔名。
點選finish可能彈出警告:JAR export finished with warning.See details for additional information,此警告可能由一些小的細節引起,可以不必在意,只要程式能測試時正常執行就無大礙,點選“ok‘。
                    3、在所設定的JAR檔案匯出資料夾下,可以看到匯出的JAR檔案,如果第二步沒有警告,則雙擊可以直接執行,否則可能無法執行,但不影響成功生成.exe及其執行效果。

        第二步:使用exe4j將JAR包打包成.exe檔案。
                     準備工作:下載並安裝exe4j(僅4M)。根據自己系統及JDK版本(32位或64位),選擇32位或64位exe4j下載安裝(華軍軟體園等都有),其中64位也可用於32位的JDK版本。安裝過程簡單,無特殊設定。

                     正式使用:
打包過程共十小步驟。
                     1、開啟軟體,出現歡迎頁,在右下角設定license(註冊號),之後next。提供個註冊號的網址:
                            http://down.51cto.com/data/1391905
                            其中有個本人已驗證使用的為:A-XVK222711F-134h5ta8yxbm0 
                            注:不註冊則使用的是評估版(30天試用),且每次執行.exe時都會彈出”該程式用exe4j評估版建立“的提示,有些煩人!
                    2、 選擇工程型別為:"JAR in EXE" mode。
                    3、 Application info步驟:第一個文字框設定應用名稱,任意設定;第二個設定打包後輸出.exe所在資料夾,一般設定與JAR檔案所在相同;next。
                    4、 Executable info步驟:Executable type:根據自己的專案選擇程式型別(介面程式、控制檯程式或伺服器程式);
                                                             Executable name:設定生成的.exe程式的名稱;
                                                             Icon File:用於設定程式的特殊顯示圖示,可不選;
                                                              Fail if an Exception ……:如果打包不正確,可以嘗試不選此項試試;
                                                             Change working directory……:預設選上;
                                                           
重點點選Advanced Options下拉列表:選擇”32-bit or 64 bit“設定使用的JVM型別(與java程式一致),裡面僅一個選擇項,預設不選擇(即預設使用JVM的型別為32位)!所以即使64位的exe4j,忽略此項也將導致無法正確打包64位的java程式對應的JAR!其他項預設,直接next到進入第5步。            
                    5、Java invocation步驟:直接點選右側的綠色”+“圖示,預設選擇Archive項,文字框開啟想要打包的JAR包,點選ok,可以看到Class path中出現開啟的JAR檔案路徑。設定Main class文字框,點選右側的按鈕,選擇主函式所在的類,點選ok,next。如果需要,
可通過左下角的Advanced Options配置本地庫目錄。                     6、JRE:設定Minimum即可,不得大於當前使用的jre版本(jdk安裝目錄下的jre即可);點選下拉列表Advanced Option,點開第一項,文字域中有預設的幾項,建議刪去JAVA_HOME和JDK_HOME,之後點選”+“圖示,選擇Directory(預設),點選按鈕右側新增jre(一般從java安裝目錄複製一份用於此處使用),點選ok,可見文字域中顯示出剛新增的jre,next,選擇執行環境VM,非伺服器端,預設或Client hotspot VM皆可。
                    7、第7、8步預設next,第9步執行打包,第10步可通過點選按鈕”Click Here to Start the Application“測試打包正確與否!視結果返回設定或退出,Save as用於儲存配置檔案。
                    8、在指定的.exe生成資料夾,能否找到.exe程式並能在任何指定位數(32或64)機器上執行?!  

                    注:exe4j的每步驟左下方都有個幫助按鈕,用於說明當前步驟所設定的內容。    

常見錯誤:一、由於沒有執行第二步第4小步的重點項。該資訊常易誤解為自的jre已損壞,或沒有設定EXE4J_JAVA_HOME(無需置)引起,亦或下載的exe4j版本為32位的。圖為64位exe4j提示該錯誤時先後顯示的資訊 (對於32位的exe4j,該提示資訊可能會有所不同)                                        二、沒有執行第二步的第6小步(即沒有把預設的查詢JVM順序替換成新增jre資料夾)。
                                        此步的預設查詢順序(Search sequence)裡預設的三項:Search Windows registry(查詢登記資訊)、環境變數JAVA_HOME、環境變數JDK_HOME,通過本地測試
發現,如果不新增任何jre,三個值裡面第一個是必不可少的,否則程式打包後執行時無法找到JVM,即顯示下圖的錯誤。
                                        可見如果使用預設的設定,則程式還是依賴於系統所安裝的JDK(之中的JVM),那麼當將程式放在沒有安裝JDK的機器上時,程式依舊無法執行,沒有實現“跨平臺”。如果不需要程式在沒有安裝JDK的機器上執行, 則預設的設定即可,無需改動,否則必須自己新增jre,即執行第二步的第6步。
                                        此外,單獨的新增代表指向jre或jdk的路徑的環境變數,也無法找到JVM,即使能找到也不適用,因為不是程式每次移到一臺機器上就要新增專門的環境變數和jre。只有通過新增jre資料夾(也即添加了JVM),exe4j通過打包將JVM與JAR”融合“,生成的.exe程式的執行才能不受是否安裝JDK的限制。(所謂融合,自己的理解是,生成的.exe執行時自動呼叫第6步新增的jre,這也即是將jre檔案跟.exe檔案放在一起的原因)
                                        注:java程式執行依賴於JVM環境,所以生成的.exe仍無法單獨在沒有安裝JDK的電腦上執行(偽脫離JVM),可通過winRAR等系統常用壓縮軟體,將.exe與jre資料夾壓縮成一個自解壓格式壓縮檔案,真正實現任何機器都能執行。