JavaFX-Maven-Plugin の現状について

この記事は、JavaFX Advent Calendar 2017 の10 日目です。

JavaFX アプリケーションを Maven プロジェクトで作成する際に強くお勧めしたいのが JavaFX-Maven-Plugin です。このプラグインは JavaFX アプリケーションのビルド、パッケージ (JAR) およびネイティブ・パッケージ (Windows / Mac / Linux) を 1 オペレーションで行ってくれる優れものです。JavaFX アプリケーションの JAR パッケージは NetBeans でも作成できますが、依存ライブラリを取り込んだ巨大な JAR を生成してくれる NetBeans に比べ、本体のみのコンパクトな JAR を生成してくれます。ネイティブ・パッケージの作成も javapackager にたくさんのオプションを指定して実行する必要がなくなり、メリットは多くあります。さらに pom.xml に記述する内容のジェネレータが提供されており、質問に答えるだけで最適な記述がリアルタイムで出力されます (ジェネレータがあるため、こんかいは pom.xml の記述サンプルは示しません)。本稿執筆時点での最新版は 8.8.3 です (注: ジェネレータは 8.6.0 の記述を出力します)。

JavaFX-Maven-Plugin がサポートするのは JavaFX 8 であり、残念ながら JavaFX 9 はサポートしておらず、対応予定も決まっていません。Java 9 対応版の 9.0.0-SNAPSHOT が今年の春先まで開発されていたようですが、どうやら頓挫した模様です (ショック!)。JavaFX 9 ではモジュールの導入 (Project Jigsaw) に伴うネイティブ・パッケージのイメージ・サイズ削減が期待されています。しかし、JavaFX-Maven-Plugin は主にネイティブ・パッケージ作成の個所で Java 9 対応が上手く行かず、そのまま放置されているようです。

こちらでも Java 9 でどこまで動かせるか試してみたのですが、現行バージョンでは JAR 作成の段階で既に動作しません。どうやら内部では javafx-packager.jar を呼び出そうとしているのですが、Java 9 では標準 API のモジュールが Jigsaw ベースで再編されているため、存在しない javafx-packager.jar を呼び出そうとして失敗しているように見受けられます。おそらく 9.0.0-SNAPSHOT ではこの呼び出しを対応する Java 9 のモジュールへ置き換えようとして最終的に失敗したものと考えられます。

JavaFX-Maven-Plugin はそこまでアクティブに開発されているわけではないため (現状は Danny Althoff が 1 人でメンテナンスしている状態で、原作者の Daniel Zwolenski も今はほとんど関わっていません)、この状況が向こう 1~2 ヶ月で改善するようなことはまずあり得ません。Project Jigsaw によって大きな恩恵を受けるはずの JavaFX が、一方では大きなダメージも受けることになるとは、想像もしていませんでした。

今日のオチはちょっと暗くなってしまいましたが、明日は @boochnich さんの記事で明るくなりましょう!