JavaFXのインストーラーを作成する手順

Java

JavaFX(OpenJFX)アプリケーションの配布用インストーラーを作成する手順です。
試行錯誤の末どうにかJava 14のjpackageを使ってWindows環境用のインストーラーを作成することができました。

Java 14のインストール

AdoptOpenJDKのサイトから “OpenJDK 14 (Latest)” をダウンロードしてインストールします。
Chocolateyにはまだ登録されていませんでした。
https://adoptopenjdk.net/

インストールするとJava 14が有効になります。

> java -version
openjdk version "14" 2020-03-17
OpenJDK Runtime Environment AdoptOpenJDK (build 14+36)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 14+36, mixed mode, sharing)

Java 14のjpackageを使いたいだけなので環境変数のPathからJava 14のパスは削除しました。
基本的にはLTSバージョンであるJava 11を使用します。

Java 11については JAVA_HOME で設定しており、Pathから JAVA_HOME を参照しています。

Java 11が有効なことを確認します。

> java -version
openjdk version "11.0.6" 2020-01-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.6+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.6+10, mixed mode)

WiX Toolsetのインストール

Chocolateyから Wix Toolset をインストールします。

JavaFXプロジェクトの作成

EclipseでJavaFXのサンプルプロジェクトを作成します。
ファイル -> 新規 -> その他 から「Mavenプロジェクト」を選択して「次へ」進みます。

「javafx」のアーキタイプを検索して「次へ」進みます。

JavaFX、Mavenプラグインのバージョンはそれぞれ最新のバージョンに変更しました。

こんな感じのプロジェクトが作成されました。
「module-info.java」があり、モジュール化されているアプリケーションです。

実行するとJavaFXのサンプルアプリケーションが起動します。
(App.javaを右クリックして 実行 -> Javaアプリケーション)

インストーラーの作成

コマンドプロンプトでjavafxプロジェクトの直下に移動し、packageコマンドでJARファイルを作成します。
成功すると「target」フォルダ内に「javafx-0.0.1-SNAPSHOT.jar」が作成されます。

> mvn clean package

アプリケーション配布用のJREを作成するjlinkは「javafx-maven-plugin」がやってくれるので、「javafx:jlink」コマンドを実行します。
成功すると「target」フォルダ内に「image」が作成され、これが配布用のJREになります。

> mvn javafx:jlink

配布用のJRE(image)でJavaFXアプリケーションが起動することを確認します。

> target\image\bin\java sample.javafx.App

「jpackage」コマンドでインストーラーを作成します。
Java 14のパスを通していないのでフルパスでjpackageを使用していますが、パスを通している環境であれば「jpackage」に置き換えられると思います。

成功するとプロジェクト直下にインストーラー(javafx-1.0.exe)が作成されます。
今回作成されたインストーラーは43MBほどでした。

> "C:\Program Files\AdoptOpenJDK\jdk-14.0.0.36-hotspot\bin\jpackage.exe" --type exe --input target --name javafx --main-class sample.javafx.App --main-jar javafx-0.0.1-SNAPSHOT.jar --runtime-image target/image --vendor "sample" --win-shortcut
WARNING: Using incubator modules: jdk.incubator.jpackage

引数の説明はこちらにありますが、まだ理解できていないところが多いです。
JEP 343: Packaging Tool (Incubator)

今のところの理解はこんな感じです。

–inputJARファイルがある場所を指定する
–nameアプリケーション名を指定する
–main-classMainクラスを指定する(sample.javafx.Appクラス)
–main-jarJARファイルを指定する(mvn packageで作成したJAR)
–runtime-image配布用JREがある場所を指定する(mvn javafx:jlinkで作成したJRE)
–vendor配布元の開発者や会社名を指定する
–typeインストーラーの形式を指定する(exe、msiなど)
–win-shortcutデスクトップにショートカットを作成する

インストールしてみる

インストーラー(javafx-1.0.exe)を実行すると「C:\Program Files\javafx」にインストールが行われ、デスクトップにショートカットが作成されます。

ショートカットをダブルクリックするとサンプルアプリケーションが起動します。

「アプリと機能」からアンインストールもできます。

その他

「–vendor」指定がないときのエラー

「–vendor」の指定がないとIOExceptionで失敗してしまいます。

> "C:\Program Files\AdoptOpenJDK\jdk-14.0.0.36-hotspot\bin\jpackage.exe" --type exe --input target --name javafx --main-class sample.javafx.App --main-jar javafx-0.0.1-SNAPSHOT.jar --runtime-image target/image --temp "C:\temp\javafx"
WARNING: Using incubator modules: jdk.incubator.jpackage
java.io.IOException: Command [light.exe, -nologo, -spdb, -ext, WixUtilExtension, -out, C:\temp\javafx\images\win-exe.image\javafx-1.0.msi, -loc, C:\temp\javafx\config\MsiInstallerStrings_en.wxl, C:\temp\javafx\wixobj\main.wixobj, C:\temp\javafx\wixobj\bundle.wixobj]in C:\temp\javafx\images\win-msi.image\javafx exited with 311 code

Wix Toolsetをインストールしていないときのエラー

> "C:\Program Files\AdoptOpenJDK\jdk-14.0.0.36-hotspot\bin\jpackage.exe" --type exe --input target --name javafx --main-class sample.javafx.App --main-jar javafx-0.0.1-SNAPSHOT.jar --runtime-image target/image --vendor "sample"
WARNING: Using incubator modules: jdk.incubator.jpackage
WiXツール(light.exe、candle.exe)が見つかりません
WiX 3.0以降をhttps://wixtoolset.orgからダウンロードし、PATHに追加します。
エラー: 無効またはサポートされていないタイプ: [exe]

配布方法が分かったので開発に着手できると思う反面、「Using incubator modules」と警告が出ている通り、今後Javaのバージョンアップでどう変わるのか心配です。

タイトルとURLをコピーしました