歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> JavaFX本地應用自動更新功能的實現FXLauncher

JavaFX本地應用自動更新功能的實現FXLauncher

日期:2017/3/1 9:10:34   编辑:Linux編程

一、Javapackager介紹

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介紹

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>[email protected]:fxldemo</app.deploy.target>
</properties>

四、Maven目標

1、產生應用程序

mvn clean package

2、部署應用程序artifact到自己的Web服務器

mvn exec:exec@deploy-app

3、建立本地安裝器

mvn exec:exec@installer

五、TornadoFX介紹

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>

Copyright © Linux教程網 All Rights Reserved