結論
- 各プラットフォーム向け OpenJFX 11 ライブラリをすべて含む fat jar を生成する.
JavaFX (Java 11から非同梱)
JavaFXは,JVM上で動作するクロスプラットフォームなGUIライブラリです.が,Java 11からライブラリが同梱されなくなり,かわりにOpenJFXとして外部ライブラリ化されました.
ここで悩ましいのは「どのJavaバージョンに対応するか?」です.Java 11に対応したいものの,Java 8を簡単に切り捨てるわけにはいきません(個人ユーザへのOracleの無償アップデート提供は2020年末まで続く).
Java8/11 両方で動かす fat jar
この悩みを解決するのが fat jar で,端的に言えば OpenJFX 11 ライブラリを jar ファイルにすべて含めてしまいます.
詳細は Getting Started with JavaFX 11 > Runtime images > Non-Modular project に記載がありますが, Gradle だと(通常のjarタスクの設定に加えて)下記のような指定を追加します.
build.gradle
compileOnly "org.openjfx:javafx-graphics:$javafx.version:win"
compileOnly "org.openjfx:javafx-graphics:$javafx.version:linux"
compileOnly "org.openjfx:javafx-graphics:$javafx.version:mac"
そしてJDK11でビルドすると, Java8/11 両方で動く fat jar が出来上がります.