最近因項目需要,我需要給自己用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”的變量,否則就是空字符串
配置好了之后就重新Start Build,最終結果:
三.安裝過程
雙擊生成的 smarthome_windows_1_0_0.exe 由於使用的是試用版本的install4j,所以會有一個提示窗體彈出,確定即可
然后進入安裝向導:
(1)
(2)
(3)
(4)
(5)
(6)
至此就安裝好了,開始菜單可以看到,點擊運行即可,一開始也會有一個install4j的提示,確定即可
登陸界面:
主界面:
至此,就結束啦!O(∩_∩)O哈哈哈~ Enjoy the world of JavaFx !