2020/04/10

Java 14 の新機能 (2) - JEP 343: Packaging Tool (Incubator)

JEP 343: Packaging Tool (Incubator)

自己完結型 (つまり、Java Runtime を含んだ形) で Java アプリケーションをパッケージ化するツールです。jpackage というコマンドになっています。

JavaFX に javapackager というツールが含まれていたのですが、Java 11 以降、JavaFX は JDK に含まれなくなっていたので、javapackager も JDK に含まれなくなっていました。今回はこの javapackager ベースのパッケージ化ツールが復活したような形です。
javapackager 同様、Windows, Linux, MacOSX のインストーラが生成できます。一方、以下のようなことは出来なくなっています。
  • Java Web Start, JavaFX, Ant などの考慮は無くなった
  • GUI も無し
  • クロスコンパイル無し (他プラットフォーム向けの生成が出来ない)
  • 自動更新機能無し

基本的な使い方

非パッケージアプリケーションの場合は、
jpackage --name myapp --input lib --main-jar main.jar --main-class myapp.Main

パッケージアプリケーションの場合は、
jpackage --name myapp --module-path lib -m myapp/myapp.Main

のように jpackage コマンドを実行することで、プラットフォーム標準のインストーラが生成されます。

実行例

まず、非パッケージ型のアプリケーション jar を用意しました。Swing でウィンドウを開いて「Hello, world!」するだけの簡単なお仕事。プラットフォームは MacOSX です。
$ java -jar lib/jpkgsample.jar
この jar からパッケージを生成してみます。
$ jpackage --name jpkgsample --input lib --main-jar jpkgsample.jar
WARNING: Using incubator modules: jdk.incubator.jpackage

見てみると jpkgsample-1.0.dmg というファイルが生成されていました。MacOSX ではデフォルトで dmg を生成します。dmg なので Finder で開くと、マウントされてインストール用の画面が出てきます。
jpkgsample.app を Applications にドラッグ&ドロップすれば、インストールできます。アプリケーションから jpkgsample.app を選んで実行すると、Hello, world! 出ました。