JavaFX(JDK 8)デスクトップビジネスアプリケーションがあり、Java Web Startを使用して展開します。ユーザーにはJava 8がインストールされており、URL(AWS Linuxサーバー上のパブリックURL)にアクセスするだけで、アプリケーションがダウンロード/起動します(Web Startを使用)。新しいJARをサーバーにデプロイすることで、アプリケーションも簡単に更新できます。すべてがうまく機能します。
ただし、OracleはJava 11でWeb Startを廃止し、2018年3月の「Java Client Roadmap Update」ホワイトペーパーで、JREをアプリケーションにバンドルすることを推奨しています(「アプリケーションが個別に配布されるという概念したがって、スタンドアロンJREからは急速にフェードアウトします。」)。ユーザーがWeb StartでJava 8に留まることを信頼することはできません。ユーザーが8のままであったとしても、Java 8を引き続き使用するにはライセンスが必要です持っている、非常に高価になる可能性があり、とにかくコミュニティと一緒にJavaFX 11とOpenJDKに移行することを好むでしょう。
JavaFX 11に移行したいと思います。OpenJFXの「Getting Started with JavaFX11」に従っています( https://openjfx.io/openjfx-docs/ )、OpenJDK 11.0.1をGluonのJavaFX SDK 11.0.1(Netbeans 10vc2で)を使用して、サンプルアプリケーションを実行できるようにしました(そして、私にはJavaFX 8コードをJavaFX 11に移植できるはずです)非常に簡単に)。
しかし、これは私が方向性に固執しているところです。これをJREにバンドルし、これをエンドユーザーに展開する(およびアプリケーションの更新を提供する)にはどうすればよいですか?そこに簡単な方法はありますか(または、方向/ガイドを使用して難しい方法もあります)?
JavaFX 11で表現力豊かで使いやすいデスクトップビジネスアプリケーションを書くのに何百時間も費やすことができますが、どうすればよいでしょうか?
JWrapper、InstallAnywhereなどの展開ツールキットは、Java 11のこの新しい時代に適していますか? Gluon/openjfx.ioには、おそらく私が見逃した推奨事項やガイドがありますか?フロントエンドコードの記述に重点を置いている開発者がアプリケーションをデプロイする方法について、信頼できるソースから推奨事項やガイドを見つけることができないようです。
助けやガイダンスをありがとう。
現在の動作は、プログラムをモジュールに変換してから、必要な他のすべてのモジュールに「リンク」します。
このリンクプロセスの結果は、画像と呼ばれるものです。イメージは実際にはファイルツリーであり、1つまたは複数のすぐに実行可能な実行可能ファイルを含むbin
ディレクトリが含まれます。このツリーは、通常Zipまたはtar.gzとして配布するものです。
手順は次のとおりです。
jmod
ツールを使用して、jarをjmodに変換します最初のステップは、アプリケーションをモジュールに変えることです。最低限、ソースツリーの最上部(つまり、空のパッケージ)にmodule-info.Java
を作成する必要があります。すべてのモジュールには名前があります。これは多くの場合、パッケージ名と同じですが、そうである必要はありません。したがって、module-info.Javaは次のようになります。
module com.mcs75.businessapp {
exports com.mcs75.desktop.businessapp;
requires Java.logging;
requires transitive javafx.graphics;
requires transitive javafx.controls;
}
ビルド時には、クラスパスをまったく指定しません。代わりに、モジュールパスを指定します。
モジュールパスは、ファイルではなくディレクトリのリストです。各ディレクトリには、当然ながらモジュールが含まれます。 JDKのjmods
ディレクトリは暗黙的に含まれています。含める必要があるのは、必要な非JDKモジュールを含むディレクトリだけです。あなたの場合、それは少なくともGluonのJavaFXを意味します:
javac -Xlint -g -d build/classes --module-path /opt/gluon-javafx/lib \
src/Java/com/mcs75/desktop/businessapp/*.Java
次に、通常の方法でjarを作成します。
jar -c -f build/mybusinessapp.jar -C build/classes .
Module-info.classを含むjarファイルは、モジュラーjarと見なされます。
通常、jmodの作成は簡単なプロセスです。
mkdir build/modules
jmod create --class-path build/mybusinessapp.jar \
--main-class com.mcs75.desktop.businessapp.BuinessApplication \
build/modules/mybusinessapp.jmod
最後に、JDKのjlink
コマンドを使用してすべてを組み立てます。
jlink --output build/image \
--module-path build/modules:/opt/gluon-javafx/lib \
--add-modules com.mcs75.businessapp \
--launcher MyBusinessApp=com.mcs75.businessapp
jlink
は、最小限のJREを作成します。これには、明示的に追加するモジュール(および明示的なモジュールに必要なモジュール)のみが含まれます。 --add-modules
は、追加するものを指定する必須オプションです。
他のJDKツールと同様に、--module-path
はモジュールを含むディレクトリを指定します。
--launcher
オプションを使用すると、最終イメージツリーのbin
ディレクトリに、指定された名前(等しい前の部分)を持つ追加の実行可能スクリプトが作成されます。したがって、MyBusinessApp=com.mcs75.businessapp
は、「モジュールcom.mcs75.businessappを実行するMyBusinessAppという名前の実行可能ファイルを作成する」ことを意味します。
jmod create
コマンドには--main-class
オプションが含まれていたため、マニフェストでMain-Class属性を宣言するのと同じように、Javaは実行する内容を認識します。必要に応じて、--launcher
オプションで実行するクラスを明示的に宣言することもできます。
配布するのは、イメージファイルツリー全体のZipまたはtar.gzです。ユーザーが実行する実行可能ファイルは、画像のbin
ディレクトリにあります。もちろん、独自の実行可能ファイルを自由に追加できます。また、画像ツリーの構造が保持されている限り、これを任意の種類のインストーラーに自由に配置できます。
将来のJDKには、本格的なネイティブインストーラーを作成するための パッケージングツール が含まれます。
イメージにはネイティブバイナリが含まれているため、プラットフォームごとにイメージを作成する必要があります。明らかに、1つのオプションは、Linuxシステムでイメージをビルドし、Windowsシステムで再度ビルドし、Macなどでイメージをビルドすることです。
ただし、jmod
およびjlink
を使用して、どこに構築しているかに関係なく、他のプラットフォーム用の画像を作成することもできます。
必要な追加の手順はいくつかあります。まず、他のプラットフォーム用のJDKが必要です。それらをインストーラーではなくアーカイブ(Zipまたはtar.gz)としてダウンロードし、選択したディレクトリに展開します。
各JDKはplatform文字列を定義します。これは通常、<os>-<Arch>という形式です。プラットフォームはJava.base
モジュールのプロパティです。そのモジュールを調べることで、JDKのプラットフォームを確認できます。
jmod describe path-to-foreign-jdk/jmods/Java.base.jmod | grep '^platform'
--target-platform
オプションを使用して、そのプラットフォーム文字列をjmodコマンドに渡します。
mkdir build/modules
jmod create --target-platform windows-AMD64 \
--class-path build/mybusinessapp.jar \
--main-class com.mcs75.desktop.businessapp.BuinessApplication \
build/modules/mybusinessapp.jmod
最後に、リンクするときに、他のJDKのjmods
ディレクトリを明示的に含める必要があるため、jlinkは暗黙的に独自のJDKのモジュールを含めません。
jlink --output build/image \
--module-path path-to-foreign-jdk/jmods:build/modules:/opt/gluon-javafx/lib \
--add-modules com.mcs75.businessapp \
--launcher MyBusinessApp=com.mcs75.businessapp
José:同じ問題を解決する必要があると思います( Windows上のJavaFXアプリの自己完結型アプリケーションパッケージ:InnoSetup OR javafxpackager? で私の質問を参照してください)。おそらく、JDKのjavapackagerを使用すると、多数のパラメーターがあるにもかかわらず、「簡単な」ソリューションになります。私の場合、このツールによって「Windows上のJavaFXアプリ用の自己完結型アプリケーションパッケージ」を生成することに成功しましたか?