8でのJavaFXアプリケーションは、javapackagerコマンドを使ってアプリケーションとアプリケーションの実行に必要なJava実行環境をまとめて固めて配布することができました。固め方には、zipアーカイブの他、Windows、Linux、MacOSそれぞれのソフトウェアパッケージ形式(インストーラー)とすることも可能です。11からはJavaFXが分離した際にjavapackagerコマンドも外されてしまいました。それまでの間、jlinkコマンドを使ってアプリケーションとアプリケーションの実行に必要なJava実行環境をまとめることとします。jlinkはOS固有のパッケージ形式(インストーラー)を作成することはできません。jlinkコマンドを使った実行イメージの作成jlinkコマンドは、指定したモジュールが依存するモジュール群をJDKから抜きだして、実行イメージまとめるのに使います。モジュール対応したJavaFXアプリケーションの実行イメージの作成JavaFXアプリケーションが、モジュール対応している場合はjlinkコマンドで簡単に実行イメージを作成することができます。jmodsを展開したディレクトリを指定します。earthgadget=com.torutk.gadget.earth/com.torutk.gadget.earth.EarthGadgetApp--module-pathでは、JDK標準以外のモジュールを収容するディレクトリを指定します。Files\Java\JavaFX\javafx-jmods-11.0.1)と、アプリケーションのモジュール化JARファイルのあるディレクトリ(カレントディレクトリ下のdist)を指定しています。--add-modulesでは、アプリケーションのメインモジュール(com.torutk.gadget.earth)を指定しています。--outputでは、実行イメージを生成するディレクトリを指定しています。--launcherでは、実行イメージの中にアプリケーション起動用のコマンド(シェルスクリプト/バッチファイル)の名前と起動するモジュールおよびメインクラス名を指定しています。実行イメージが展開されるディレクトリに、JavaFX関係のライブラリ(ネイティブライブラリのdllファイル、クラスライブラリのJARファイル等)も展開されます。OSなら後者を実行するとJavaFXアプリケーションが立ち上がります。jlinkコマンドのmodule-pathオプションで、JavaFXのSDKのlibディレクトリを指定すると、実行イメージの中にネイティブライブラリが含まれないので実行時にエラーとなってしまいます。jlinkコマンドでJavaFXを指定する場合は、JavaFXのjmodsを指定します。モジュール対応していないJavaFXアプリケーションの実行イメージ作成(改訂)JavaFXアプリケーションがモジュール対応していない場合は、JavaFXアプリケーションが必要とするモジュールをjdepsコマンドでリストアップしてからjlinkコマンドでリストアップされたモジュールをそれぞれ指定します。現時点ではJDKのモジュールから必要なものを抜粋した実行イメージを生成することができますが、実行イメージにJavaFXライブラリとアプリケーションを含めることはできませんでした。jdepsでアプリケーションの実行に必要なモジュールを調べるまず、アプリケーションJARファイル(非モジュール対応)をjdepsで解析します。ここで、非モジュールJARの依存関係を解析する場合、jdepsコマンドのオプション--print-module-depsおよび--list-depsは使用しないのがミソです(id:skrbさんの次のブログ参照)。skrb.hatenablog.comまずは、アプリケーションJARファイルだけを指定した場合の実行例です。見つかりませんD:\work\EarthGadget>アプリケーションJARが依存するJDKのモジュールのみ表示されます。JavaFXのモジュールはリストされません。JavaFXライブラリが必要とするJDKのモジュールもリストされていません。そこで、JavaFXライブラリを解析対象に追加します。jdk.xml.domなお、--module-pathに、JavaFXのSDKではなく、JMODの方を指定すると何故か依存が解析されませんでした。見つかりませんD:\work\EarthGadget>非モジュール対応アプリケーションJARファイル(EarthGadget.jar)が依存しているのはjava.basejava.prefsjavafx.basejavafx.controlsjavafx.graphicsとなります。これらを指定すればあとは依存関係を辿って必要なモジュールが取り込まれた実行イメージが生成されます。java.baseは暗黙で使用されるモジュールなので指定を省略できます。javafx.graphicsはjavafx.controlsが依存しているのでこちらも省略できます。javafx.baseはjavafx.controlsが依存しているのでこちらも省略できます。ディレクトリの容量は約87MBとなりました。JavaFXライブラリ(クラスライブラリおよびネイティブライブラリ)も含まれています。アプリケーションはこのruntimeには含まれません。dist\EarthGadget.jarまとめモジュール対応したJavaFXアプリケーションは、jlinkコマンドで実行に必要なJDK、ライブラリ(Javaクラスライブラリ、ネイティブライブラリ)、アプリケーションをまとめたアプリケーション実行イメージを生成できる。モジュールに対応していないJavaFXアプリケーションは、jdepsコマンドで実行に必要なJDKのモジュールを解析し、続いてjlinkコマンドで必要なモジュールを抜粋し実行イメージを生成する。非モジュール対応のJARファイルは実行イメージには取り込まれない。月別アーカイブはてなブログをはじめよう!torutkさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。