天天看點

JavaFX本地應用自動更新功能的實作FXLauncherJavaFX本地應用自動更新功能的實作——FXLauncher

版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/chszs/article/details/50669923

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

作者:chszs,未經部落客允許不得轉載。經許可的轉載需注明作者和部落格首頁: http://blog.csdn.net/chszs

一、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>