jpackageでJavaアプリのインストーラーを作る

Javaアプリケーションのインストールパッケージを作れるjpackageが、どうもJDK13に入りそうな勢いでEarly Accessが出てたので試してみます。
jpackageは、JavaFXにあったjpackagerをベースにしたパッケージングツールです。
JEP 343: Packaging Tool

EAはこちらからダウンロードできます。開発中のJDK13をベースにしてると書いてありますね。
jpackage

※12/8追記 Java 14でincubatorモジュールとして含まれることになりました。

Windowsで必要なもの

Windowsインストーラーを作るには、iscc.exeが必要で、これはInno Setupに入ってます。
jrsoftware.org // Jordan Russell's Software
※12/8追記 Java 14では不要になったようです

あと、MSI形式のインストーラーを作るにはlight.exeとcandle.exeが必要で、これはWix toolsに入ってます。
WiX Toolset
zipでwix311-binaries.zipをダウンロード・解凍してパスを通すのがいいと思います。

インストーラを作る

ではインストーラを作ってみます。
とりあえずウィンドウを作るアプリを作ってみます。

import javax.swing.*;

public class MyFrame {
    public static void main(String[] args) {
        var f = new JFrame("My Package");
        var t = new JTextArea();
        f.add(t);
        var b = new JButton("Hello");
        f.add("North", b);
        b.addActionListener(al -> t.append("Hello\n"));
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(500, 400);
        f.setVisible(true);
    }
}

ボタンを押すとHelloと表示されるだけのアプリ
実行画面

jpackageではclassファイル単体ではパッケージを作れないようなので、一度jarを作ります。

> javac MyFrame.java

> mkdir target

> jar -cf target/mypack.jar MyFrame.class

そしたら、jpackageでインストーラを作成

>jpackage create-installer -ooutput pack -input target --name MyApp --main-class MyFrame --main-jar mypack.jar
Warning: Windows Defender may prevent jpackage from functioning. If there is an issue, it can be addressed
 by either disabling realtime monitoring, or adding an exclusion for the directory "C:\Users\naoki\AppData\Local\Temp\".
Warning: Windows Defender may prevent jpackage from functioning. If there is an issue, it can be addressed
 by either disabling realtime monitoring, or adding an exclusion for the directory "C:\Users\naoki\AppData\Local\Temp\".
Warning: Windows Defender may prevent jpackage from functioning. If there is an issue, it can be addressed
 by either disabling realtime monitoring, or adding an exclusion for the directory "C:\Users\naoki\AppData\Local\Temp\".

※12/8追記 create-installerは不要になっているようです。

こんな感じでexeとmsiインストーラができています。--typeで形式を指定することもできます。

>dir pack
 C:\Users\naoki\Documents\mypack\pack のディレクトリ

2019/03/06  05:39    <DIR>          .
2019/03/06  05:39    <DIR>          ..
2019/03/06  05:38        33,266,979 MyApp-1.0.exe
2019/03/06  05:39        53,588,671 MyApp-1.0.msi

exeが33MBでmsiが53MBですね。
exeを実行すると、インストーラ画面がでます。
インストーラ画面

インストール実行すると、あのインストール画面が。
インストール実行

スタートメニューにも追加されています。 スタートメニュー

もちろん、このアイコンをクリックすれば起動します。
実行画面

ところで、msiをダブルクリックするといきなりインストール始まるので注意です。

ファイルはWindowsの場合C:\Program Filesにインストールされます。
jshell.exeなど、JDKのファイルも含まれてることがわかります。 JDKもインストールされる

JDKまるごと含まれてると考えたら、50MBでインストーラは妥当な感じですね。

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

JDKだけのインストーラも作れるみたい。なかなか便利ですね。