利用Fat_Jar + JSmooth 建立JAVA EXE檔的用法
因JSmooth 最好只內含一個jar 檔, 故若有叫用不同Package 的library的情況時需先把個別Package 的jar 檔各自處理, 然後一次性封裝入主程式所在的Package內, 再將主程式所在的Package 產生的jar 檔來製作exe 檔。事實上有許多不同的作法可以達成同樣的目的,本例將使用較簡易的作法。此例利用Demorun Class 內的主程式呼叫另一個Package 內的Demolib class 內的方法在控制台上顯示HELLO 字串。在安裝完Fat Jar與JSmooth之後, 我們實際上把JAVA程式封裝為一個可以獨立執行的EXE檔的作法如下:
Step 1. 先建立library 檔的package
在 Eclipse 下建立一個名為 demolib 的專案並在其下建立一個同名的CLASS 內含一個名為 sayHello() 的類別方法如下圖
其程式碼如下:
Step 2. 產生library package 的Jar 檔之一
在eclipse 左側的 Package Explorer的Workspace視窗裏 demolib 專案名稱上按滑鼠右鍵, 並在彈出的選項中以滑鼠左鍵點選帶有綠十字符號的 Build Fat Jar 選項
Step 3.產生library package 的Jar 檔之二
點選後會彈出一個Configure Fat Jar參數組態視窗如下, 直接按下 Finish 即可, 不用做任何修改。按下後系統會在原Package 內 JRE的下面產生一個名為 demolib_fat.jar 的檔案
在實際檔案結構內我們真的可以找到這個 jar 檔, 請參見下圖
Step 4. 建立主程式package
在 Eclipse 下另建立一個名為 Demorun 的專案其內有一個同名的CLASS 內含 main() 主類別方法。在程式碼內需import 方才建立的 Demolib如下圖
Step 5. 主專案內的Library 路徑設定之一
在eclipse 左側的 Package Explorer的Workspace視窗裏 Demorun 專案名稱上按滑鼠右鍵, 並在彈出的選項中以滑鼠左鍵點選 Properities 專案屬性選項。 點選後會彈出一個專案屬性選項視窗如圖, 再用滑鼠左鍵點選 [Java Build Path] 項目,並將右側視窗切換到Libraries 頁面。
Step 6. 主專案內的Library 路徑設定之二
以滑鼠左鍵點選在[Java Build Path] 視窗的Libraries頁面右側的Add JARs…按鈕,點選後會彈出一個路徑選擇視窗如圖, 再以滑鼠左鍵點選在前述Step.3 所建立的demolib_fat.jar 的檔案。
按下OK後原 [Java Build Path] 視窗的Libraries 頁面的 Path 項會增加一個demolib_fat.jar項目如圖
且在原eclipse 左側的 Package Explorer的Workspace視窗裏 Demorun 專案下也會多出一組Referenced Libraries 內容如下圖。
如此一來我們已經把Demorun 製作成一個可以完全獨立執行的個體, 您可以試用Run As Java Application 功能執行看看。
Step 7. .產主程式package 的Jar 檔之一
一如Step 2.在eclipse 左側的 Package Explorer的Workspace視窗裏 Demorun 專案名稱上按滑鼠右鍵, 並在彈出的選項中以滑鼠左鍵點選帶有綠十字符號的 Build Fat Jar 選項,點選後會彈出一個Configure Fat Jar參數組態視窗如下, 需先檢查系統預設的Jar-Name是否符合我們的期望名稱且需特別注意Main-Class 是否正確。最後按下 Next鍵進入下一步檢查。
Step 8. 產主程式package 的Jar 檔之二
前一步按下 Next鍵後會再出現一個Select file for Fat Jar 視窗。若確認所有相關的jar 及 package 均有選定如圖,則按下Finish 完成所有建置程序,否則先勾選後再Finish。若果一切順利的話將會看到Build 成功的訊息,最後再按下OK 確認。
Step 9. 以java測試獨立jar檔的執行情況
進入MSDOS模式視窗後, 以 CD指令把現行目錄切換到主程式 jar 檔所在的位置後,以JAVA命令列語法執行前一步所產生的 jar 檔, 應能正常執行並顯示Hello 字樣。若java 無法執行, 出現 ’java’ 不是內部或外部命令、可執行的程式或批次檔 等訊息時通常是路徑設定不對,請先檢查 PATH 及 classPath 兩項環境變數是否正確設定。
Step 10.啟動JSmooth
從桌面或開始功能表內選取 JSmooth 啟動, 在此以0.9.9-7版為例, 您會先看到一個Welcome 畫面如下:
欣賞完歡迎畫面後點選左邊的 [Skeleton] 按鈕開始一步一步設定並執行。
Step 11.設定EXE檔的封裝方式
進入打包設定畫面後打開在Skeleton Selection 項目右側的COMBO 下拉選單並點選您所需要的打包腳本。
一般命令列應用程式選用 Console Wrapper, 若為Windows 應用程式則點選 Windowed Wrapper, 這次我們以MSDOS 命令列程式為例故選用 Console Wrapper如下圖。
選取完成後會出現JVM的提示訊息如下圖。一般使用預設值即可,不必再做設定。欣賞完畫面後點選左邊的 [Executable] 按鈕進行下一步設定。
Step 12.設定EXE檔的外部細節
進入Executable外部細節設定畫面後點選第一個項目並輸入您所要的執行檔名,別忘了.exe喔! 否則會編譯失敗的!
再來進入Executable外部細節設定的第二個項目,點選右側的按鈕並在彈出的新視窗內找出您準備賦予這個EXE檔的圖標,挑一個美美的圖標應該會有個比較好的心情!不過別忘了,圖標檔只能選用.ico, .png, 千萬別選.bmp檔。 雖然根據官方文件表示.gif, 和 .jpg 也可以接受, 但是實際上操作時若JVM在圖標檔轉換有問題時,您在Compiler 時會看到 - Error: null 的訊息。
若一切設定正確時,您會在中間看到您選用的美美的圖標。
再來進入Executable外部細節設定的最後一個項目,點選Current Directory右側的按鈕並在彈出的新視窗內選定這個EXE檔的執行的工作目錄,也可以直接勾選使用與exe檔相同的路徑。這個設定是一個大學問,而且對於各種不同的封裝打包方式會有不一樣的作用,請參見官方說明文件第3.2節,裏面有很詳細的說明。
官方說明文件第3.2節的部份摘要如下:
Step 13.設定EXE檔的內部細節
內部細節的對象其實就是JAVA 程式的部份,透過這裏的設定我們可以把執行檔被叫用後的系統控制權交給正確的JAVA主程式,同時把被叫用時的外部資訊傳遞進去。
點選Application 按鈕後會出現進入Executable內部細節設定畫面。其中最重要的是Main class的設定,但是在設定Main class之前必需先把Classpath或Embedded jar正確設定,否則會找不到正確的程式進入點。一般的作法是把進入點放入Classpath內,首先請點選畫面右方的新增路徑按鈕。並在彈出的檔案選擇視窗中選取在Step 8/9 內產生並測試過的jar 檔!
選定後的結果如下圖注意在Classpath 欄內已經出現正確的jar 檔及路徑。
另外一種作法是把進入點放入內嵌的jar檔內,首先請點選中間選項上的 □ Use an embedded jar 然後再點選右方的按鈕。並在彈出的檔案選擇視窗中選取在Step 8/9 內產生並測試過的jar 檔!
設定完成後的畫將會如下圖。
不論使用上述兩種方法中的那一個,接著就要到 Application Settings 項目內設定主程式的進入點。請如上圖點選 Main class 右方的按鈕。並在彈出的選擇視窗中依序打開各Class,最後選取main( ) 方法所在的class。
點選完成後在Main class 項內應有正確的 Package.class… 路徑。下一行的Application Arguments 為預設要傳入main() 的參數值。不過若選用的封裝方式是Console Wrapper,則系統會用命令列上的參數取代在這裏設定的預設參數。所以這一次不填了!
Step 14.編譯並產生EXE檔
到這步時該設定的東東都已經完成了。接下來就等著把設定存檔後進行編譯及封裝了。點選上方的存檔圖標開啟存檔視窗,並在新視窗下方的檔案名稱項輸入適當的檔名,最後按右下方的 儲存 鈕。
儲存完成後可以按下旁邊的編譯按鈕開始Compile,系統會彈出一個進度視窗顯示作業進度。全部完成後按下 Done 鈕即可!
Step 15.EXE檔測試
到這步時所有工作都已完成,接下來就進行最後的測試。進入MSDOS模式視窗後, 以 CD指令把現行目錄切換到exe 檔所在的位置後,應可看到方才儲存的Project 檔及新近產生的exe檔。 以命令列語法直接鍵入exe主檔名後按下ENTER鍵, 應能如Step 9. 一樣執行並顯示Hello 字樣。一切大功告成!
留言列表