最近因項目需要,我需要給自己用Javafx2.1開發的案頭軟體SmartHome製作Windows安裝包,由於過程還蠻複雜,於是記錄下來留給以後看。
一.製作工具
1.Fatjar:Eclipse 的外掛程式,它的外掛程式更新網址:http://kurucz-grafika.de/fatjar
2.Install4j:一個使用Eclipse RCP開發的收費的用於為java程式製作安裝包的軟體,提供90天的試用期,官方下載網址:http://www.ej-technologies.com/products/install4j/overview.html
3.JRE:需要的是JDK7u6,:http://jdk7.java.net/download.html 這個是目前(截止2012-7-17)最新的JRE,因為它已經將Javafx2.2包括其中了
詳細資料網址(開源中國):http://www.oschina.net/news/30075/javafx-2-2
誠然,資訊中提到該JDK中提供了兩種用於打包Javafx應用程式的工具,一種是使用jdk內建的工具javafxpackager,一種是使用ant,個人感覺兩種方式都不好用,特麻煩...囧
官網上的協助文檔地址:
Native packaging for JavaFX : https://blogs.oracle.com/talkingjavadeployment/entry/native_packaging_for_javafx
Deploying JavaFX Applications : http://docs.oracle.com/javafx/2/deployment/jfxpub-deployment.htm
本教程的主要內容就是使用上面的工具Javafx應用程式製作windows安裝包
二.製作步驟
1.安裝JDK7u6,安裝時我指定JRE安裝在和jdk的同一個目錄下,檔案夾的名稱是jre7u6,我安裝之後的目錄是 D:\Java\jdk1.7.0_06 相應的jre目錄是 D:\Java\jre7u6
將SmartHome項目的java環境換成剛才安裝的jdk,方法很多,我習慣建立User Libarary,取名為jre7u6-javafx2.2(隨便命名)
刪除以前的分開來的jre和javafx的rt,添加這個jre一個即可!
2.安裝Farjar,Eclipse外掛程式的線上安裝方式,安裝完成之後重啟Eclipse,點擊項目,選擇build Fat Jar,配置一些基本資料,例如MainClass,ClassPath
第二頁要選中項目所需要的第三方jar包
3.經過前兩步得到了Jar包 smarthome0.0.7_fat.jar,在項目的根目錄下,然後建立一個檔案夾SmartHome,存放一些製作安裝包所需要的內容,大致內容其實也就是幾個:
(1)項目打包好的Jar包 smarthome0.0.7_fat.jar
(2)軟體的圖片資源,也就是logo表徵圖,Splash圖片等等,可以沒有
(3)第三方jar包,因為上面的fatjar已經將所需要的第三方jar打包好了,所以這裡可以不用了 ......
4. 安裝Install4j,我下載了試用版,只能試用90天,不過夠我用了,不過,試用版本得到的軟體會有一些煩人的提示喲,不喜歡的話就去下破解版吧或者buy it!
安裝好了之後,建立一個project,取名smarthome,儲存到哪裡都行,這裡我還是儲存到了SmartHome目錄下,因為install4j這個軟體經常需要添加檔案或者檔案夾
它預設是進入的是該project所在的目錄
5.接下來是最關鍵的一步:製作JRE Bundle,這是為了後面的media file的製作做準備
原因是這樣子的:install4j的server上沒有最新的jdk7u6,而客戶機一般是沒有安裝java環境的,即使有,也不可能是最新的jre7u6,所以,要讓軟體綁定這個特定的jre!
為了綁定這個特定的jre,首先就是要製作一個JRE Bundle,然後在後面的media file的配置中可以選擇這個jre bundle
詳細內容可以查看install4j的安裝目錄下的協助文檔:jreBundle.html,寫的很好很詳細
在install4j的主菜單中選擇 Project->Create a JRE Bundle,開始製作。
在 Select the JRE中選擇第一步中安裝的jre7u6目錄
在Output Directory中,這裡是指定產生的jre bundle檔案的匯出路徑,預設是放在install4j的安裝目錄下的jres檔案夾中,因為我之前已經製作過了一次,
所以jres目錄下已經有了這個jre bundle,所以我重新指定匯出到前面建立的SmartHome目錄下,因為我通過一次製作錯誤發現其實尋找路徑包含了當前的install4j project的根目錄!
但是協助文檔中並沒有提到!
在協助文檔 Media File Wizard: Bundled JRE 中說到JRE Bundle檔案的尋找路徑是 $INSTALL4J_HOME/jres and {user home directory}/.install4j5/jres
“If you choose to bundle a JRE by selecting the "bundle the following JRE" radio button, you have to choose a JRE from the drop down list below it. If you select "manual entry" in the drop down list, a text field will appear where you can enter a file name with compiler variables. Please note that you cannot enter a path here, but only a bundle filename that will be searched in $INSTALL4J_HOME/jres and {user home directory}/.install4j5/jres. The existence of this bundle file will be checked only at compile time, not by the wizard.”
在Bundle file name是用於指定budle檔案的名稱,指定Java version和Custom ID,不指定的話install4j自己能夠檢測出來的
其他的步驟預設即可,最後產生bundle windows-x86-1.7.0.6_jre7u6-javafx2.2.tar.gz 是一個壓縮檔,至於為什麼是Linux下常見的壓縮檔我也不知道,軟體開發人員喜歡?也未必。。。
產生的budle檔案的名稱 {platform}-{Java version}-{Custom ID} 後面兩個可以自己指定,如果不指定使用預設,那麼產生的bundle檔案是 windows-x86-1.7.0_06-ea.tar.gz
6.開始真正的製作安裝包!我只介紹我需要配置的步驟,不詳細描述Install4j的具體使用!
使用教程參考網址:
Install4j使用指南: http://wenku.baidu.com/view/f8abc62ded630b1c59eeb544.html###
用install4j為Java打包exe教程: http://wenku.baidu.com/view/d0fb8e0716fc700abb68fcc2.html###
系統安裝包設計開發說明(By Install4j): http://wenku.baidu.com/view/20f86306bed5b9f3f90f1ced.html###
(1)General Setting
在Application Info中設定軟體的Full Name和Short Name以及版本資訊
在Java Version中設定最小的版本號碼是1.7,並刪除JRE Search Sequence中的所有項---這不是一般的常見的配置方式,因為打包Javafx本身就不常見!它的JRE是必須要隨著安裝包一起走的!
一般情況是這樣子的,按照搜尋的順序選擇有合適的滿足最大最小條件的JRE來運行程式,這裡我們不需要搜尋,而是綁定前面製作好了的JRE!
在Language中選擇第一項:簡體中文
在Media File Options中設定產生的安裝檔案的儲存路徑,為了方便,我還是儲存到SmartHome檔案夾中,檔案的名稱使用預設的pattern來產生
其他的部分保持預設即可
(2)Files
在Define Distribution Tree中點擊 Installation Directory,然後選擇添加檔案或者檔案夾,選中使用Fatjar匯出的jar包和軟體的logo圖片,其他的預設即可
最終結果:一個jar,一張圖片
(3)Launchers
建立一個launch,選擇 Generated launcher
在Executable info中設定啟動程式exe檔案的名稱:SmartHome,如果只允許一個執行個體運行,那麼選中Allow Only a single running instance of the application
在Icon中設定軟體的icon,選中前面匯入的logo
在Java Invocation中的Class Path中匯入前面的jar包,並指定Main Class
其他部分保持預設即可
(4)Installer
全部保持預設
(5)Media
建立Media File,選擇Installer,並且type是windows
在Configure installer options中設定安裝到客戶機子上的檔案夾的名稱,預設是shortname,我改為了編譯時間的變數fullName的值
重點在Bundle JRE(綁定JRE)中,選擇Bundle the following JRE,並且選擇Manual entry,在後面的文字框中輸入前面製作的JRE Bundle的檔案名稱 windows-x86-1.7.0.6_jre7u6-javafx2.2
注意,不包含 .tar.gz, 還要注意的是這個檔案是在SmartHome目錄下的,也是可以找到的!詳情看前面的製作介紹!
(6)Build
點擊Start Build,報錯了,一定要在Application Info中設定一個JRE的搜尋路徑,由於這個JRE是靜態繫結的,所以選擇環境變數 sys.withJre
它的描述中提到了如果JRE是靜態繫結到media file中的,那麼這個變數就是一個包含“_with_jre”的變數,否則就是Null 字元串
配置好了之後就重新Start Build,最終結果:
三.安裝過程
雙擊產生的 smarthome_windows_1_0_0.exe 由於使用的是試用版本的install4j,所以會有一個提示表單彈出,確定即可
然後進入安裝嚮導:
(1)
(2)
(3)
(4)
(5)
(6)
至此就安裝好了,開始菜單可以看到,點擊運行即可,一開始也會有一個install4j的提示,確定即可
登陸介面:
主介面:
至此,就結束啦!O(∩_∩)O哈哈哈~ Enjoy the world of JavaFx !