JavaFX本地應用自己主動更新功能的實現——FXLauncher
作者:chszs,未經博主同意不得轉載。經許可的轉載需注明作者和博客主頁:http://blog.csdn.net/chszs
一、Javapackager介紹
JavaFX已經成為構建現代桌面應用最好的UI框架之中的一個。可是它一直存在部署不方便的問題。
Javapackager工具就是針對這個問題的解決方式,正如同JavaFX已經打包進JDK 8中,Javapackager工具也隨同JDK 8一同提供。
Javapackager工具使得創建本地應用的安裝器非常easy,可是非常遺憾的是。Javapackager不支持自己主動更新。
而Java Web Start倒是能夠支持更新操作,但它不能打包本地應用。
Javapackager工具能夠運行針對Java應用程序和JavaFX應用程序的打包和簽名的任務。
語法: javapackager command [options]
command包括:
1)-createbss
轉換CSS文件為二進制形式
2)-createjar
依據其他參數產生JAR文檔
3)-deploy
產生主要的應用程序公布包(能夠是自包括的應用程序公布包)
4)-makeall
運行編譯,createjar和deploy都會調用它
5)-signjar
依據提供的證書相應用程序簽名
二、FXLauncher介紹
FXLauncher工具結合了Javapackager的本地安裝器功能和Java Web Start類似的更新機制。使得能夠使用FXLauncher而無需本地安裝包,以及公布僅有14KB的可運行JAR文件(launcher)。通過在線安裝方式下載應用的各個模塊並保持應用的版本號更新。
launcher會先查看應用程序的manifest文件(app.xml)的內容,manifest文件用於在啟動時同步本地artifact。
當Manifest被加載時。用戶會看到這種動畫:
當應用程序開始更新時,用戶會看到這種動畫:
預加載器接着會控制應用程序的過程。launcher看起來是使用CSS配置的。
manifest文件(app.xml)的內容演示樣例:
<Application uri="http://fxldemo.tornado.no/" launch="no.tornado.FxlDemo">
<lib file="controlsfx.jar" checksum="1589854040" size="954085"/>
<lib file="fxldemo-2.0.jar" checksum="223197943" size="4865"/>
<updateText>Updating...</updateText>
<updateLabelStyle>-fx-font-weight: bold;</updateLabelStyle>
<progressBarStyle>-fx-pref-width: 200;</progressBarStyle>
<wrapperStyle>-fx-spacing: 10; -fx-padding: 25;</wrapperStyle>
</Application>
本地安裝器不包括不論什么代碼,因此在應用程序公布新版本號時無需重建它們,僅僅需簡單地復制應用程序的artifact到提前定義的位置。FXLauncher會處理剩下的一切工作。
FXLauncher還能夠處理多種編程語言的應用,它與TornadoFX結合起來工作的極好。
FXLauncher和Tornado結合的樣例見: http://fxldemo.tornado.no/
三、FXLauncher的使用步驟
1)編譯項目JAR到app.dir
2)復制依賴包到app.dir
3)生成app.xml manifest
4)創建本地安裝器
5)上傳artifact到自己主動更新倉庫
復制部署描寫敘述符。並按自己的需求進行改動:
<properties>
<!-- 應用程序名 -->
<app.filename>${project.name}</app.filename>
<!-- JavaFX應用的入口類 -->
<app.mainClass>no.tornado.FxlDemo</app.mainClass>
<!-- app和launcher存放位置 -->
<app.dir>${project.build.directory}/app</app.dir>
<!-- 本地安裝器存放位置 -->
<app.installerdir>${project.build.directory}/installer</app.installerdir>
<!-- 托管應用artifact的基礎URL -->
<app.url>http://fxsamples.tornado.no/demo/</app.url>
<!-- Optional scp target for application artifacts hosted at the above url -->
<app.deploy.target>w48839@fxldemo.tornado.no:fxldemo</app.deploy.target>
</properties>
四、Maven目標
1、產生應用程序
mvn clean package
2、部署應用程序artifact到自己的Webserver
mvn exec:exec@deploy-app
3、建立本地安裝器
mvn exec:exec@installer
五、TornadoFX介紹
TornadoFX是針對Kotlin語言的輕量級JavaFX框架。TornadoFX的特性包括:
1)依賴注入
2)類型安全建立器
3)異步任務運行
4)MVC
5)極度輕量級
6)小巧簡單的API
7)為模型對象提供的RESTclient
8)零配置,無需XML,無需凝視
https://github.com/edvin/tornadofx
Tornado的Maven依賴:
<dependency>
<groupId>no.tornado</groupId>
<artifactId>fx</artifactId>
<version>1.2.3</version>
</dependency>