はじめに
Windows で jpackage によるアプリケーションのインストーラ作成の手順をまとめておきます。
jpackage については以下を参照してください。
Gradle プロジェクト
org.beryx.jlink プラグインを使うのが簡単。
build.gradle.kts は以下のようになる。
plugins {
application
id("org.openjfx.javafxplugin") version "0.1.0"
id("org.beryx.jlink") version "3.0.1"
}
repositories {
mavenCentral()
}
dependencies {
testImplementation(libs.junit.jupiter)
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
javafx {
version = "21.0.4"
modules("javafx.controls")
}
application {
mainClass = "com.example.App"
mainModule = "example.app"
}
tasks.named<Test>("test") {
useJUnitPlatform()
}
jlink {
options = listOf("--strip-debug", '--compress', '2', "--no-header-files", "--no-man-pages")
launcher {
name = "MyApp"
}
jpackage {
skipInstaller = true
}
}
アプリケーション本体は以下の要領。
package com.example; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class App extends Application { @Override public void start(Stage stage) { Label label = new Label("Hello, World"); Scene scene = new Scene(new StackPane(label), 320, 240); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(); } }
jlink はモジュールを利用することが前提なので、module-info.java を以下のように作成する。
module example.app {
requires javafx.controls;
exports com.example;
}
なお、非モジュールライブラリを使う場合には、org.gradlex.extra-java-module-info プラグインなどを使い、非モジュールライブラリをモジュールに変換して使うことになる。
実行パッケージの生成
以下を実行することで、アプリケーションのパッケージが作成できる。
gradlew jpackage
skipInstaller = true を指定しているため、インストーラの生成は行われない(インストーラを生成するには、続く WiX toolset のセットアップ を行う)。
以下のファイルが作成される。
app\build\jpackage\MyApp app\ runtime\ MyApp.exe
MyApp フォルダをそのまま任意環境に持っていけば、アプリケーションとして動かすことができる。
WiX toolset のセットアップ
インストーラ作成時には Wix 3 が必要(JDK 24 から Wix 4/5 がサポートされる)(Windows Installation eXperience)。
WiX Toolset v3 releases から Download wix311-binaries.zip をダウンロードして解凍する。この時フォルダを作成してその中に解凍すること(そのままデスクトップなどに解凍すると、大量のファイルがデスクトップに直接展開されてしまう)。
ビルドを行うターミナルで wix フォルダに対してパスを設定する。
$ENV:Path += ";C:\<path-to-wix>\wix314-binaries"
インストーラの作成
WiX toolset のセットアップが完了すれば、jlink の設定を以下のように変更する。
jlink {
// ...
jpackage {
appVersion = "0.1.0"
icon = "${project.rootDir}/app/src/main/resources/icon.ico"
vendor = "Example Co.,Ltd."
installerType = "msi"
installerOptions = listOf("--win-menu", "--win-shortcut", "--win-menu-group", "MyApp")
}
}
以下を実行することで、インストーラ msi が作成できる。
gradlew jpackage
作成された app\build\jpackage\MyApp-0.0.1.msi を実行することで、アプリケーションをインストールできる。