JavaFX已經成為構建現代桌面應用最好的UI框架之一,但是它一直存在部署不方便的問題。Javapackager工具就是針對這個問題的解決方案,正如同JavaFX已經打包進JDK 8中,Javapackager工具也隨同JDK 8一同提供。
Javapackager工具使得創建本地應用的安裝器很容易,但是很遺憾的是,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工具結合了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/
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>[email protected]:fxldemo</app.deploy.target>
</properties>
1、產生應用程序
mvn clean package
2、部署應用程序artifact到自己的Web服務器
mvn exec:exec@deploy-app
3、建立本地安裝器
mvn exec:exec@installer
TornadoFX是針對Kotlin語言的輕量級JavaFX框架。TornadoFX的特性包括:
1)依賴注入
2)類型安全建立器
3)異步任務執行
4)MVC
5)極度輕量級
6)小巧簡單的API
7)為模型對象提供的REST客戶端
8)零配置,無需XML,無需注釋
https://github.com/edvin/tornadofx
Tornado的Maven依賴:
<dependency>
<groupId>no.tornado</groupId>
<artifactId>fx</artifactId>
<version>1.2.3</version>
</dependency>