Help us understand the problem. What is going on with this article?

JavaFX & 自己完結型パッケージでのツール作成(配布編)

More than 1 year has passed since last update.

JavaFX & 自己完結型パッケージでのツール作成(配布編)

by ketman55
1 / 15

このページについて

プロジェクトでツールが欲しいとなると、SI界隈ではまだまだExcelマクロが出張ってきますが、
得てして重いし保守性に難があるし、何か他にないかなと。
Javaのクライアントアプリなんかどうかと試しまして、その手順のまとめとなります。
※本ページでは作成したアプリの配布を扱います。JavaFX実装編はこちら


自己完結型パッケージとは?

Javaのクライアントアプリのネックとして、起動する端末にJavaの実行環境を求める点があります。
すると、端末毎にバージョン差異で動いたり動かなかったりする。これでは流行らない。
そこで、配布用アプリケーションの中にJREも仕込んでおいて、アプリはこれを参照する様にします。
これで、端末側の環境に依らずにアプリを実行させることが出来ます。これなら流行る。


実行環境

環境 サービス/バージョン
実行環境 Windows10
開発環境 eclipse 4.11.0
アプリケーション JavaFXアプリケーション on Java11

手順1.アプリケーションをjarにエクスポートする

今回はeclipseのGUIからエクスポートすることとします。
プロジェクト右クリック⇒エクスポートを選択

実行可能jarを選択し、次のファイル仕様の設定へ進みます。
完了を押下すると、実行可能jarと依存関係jarの入ったlibフォルダが出力されます。

  • 起動構成はこのパッケージのメインクラスを指定
    • eclipseで実行済みであればドロップダウンに居るはず
  • エクスポート先は適当に決める
  • ライブラリ処理は「生成されるJARの隣のサブフォルダーに必須ライブラリーをコピー」を選択 image.png

実行可能jarと外部ライブラリ入りのフォルダが作成されました。
無題.png


手順2.アプリ用JREを作成する

次に、手順1で作成した実行可能jarが参照するJREを準備します。
eclipseで使っているJREをそのままコピーしてきても動作はしますが、
配布用ということで、なるべく必要最小限のサイズに収めたいことがモチベーションです。


先ずは、何を詰め込む必要があるかを確認します。
作成したモジュールの依存関係を確認すれば良く、
(JDK 8以降から追加された)jdepsコマンドによって確認できます。
※端末にJDKをインストールするか、eclipseのターミナルからでも実行できます。お好みで。

jdeps --module-path "※アプリケーション作成に使用したJREのパスを記載※\pleiades\java\11.0.2\lib" -s ※作成したjar※.jar

今回はJavaFXアプリケーションを作成したため、以下の様になりました。

LDAtool.jar -> java.base
LDAtool.jar -> javafx.base
LDAtool.jar -> javafx.controls
LDAtool.jar -> javafx.fxml
LDAtool.jar -> javafx.graphics
LDAtool.jar -> 見つかりません
javafx.base -> java.base
javafx.base -> java.desktop
javafx.controls -> java.base
javafx.controls -> javafx.base
javafx.controls -> javafx.graphics
javafx.fxml -> java.base
…(以下省略)

JRE化に当たってはjarと直接の依存関係にある部分のみを意識します。
今回は以下が該当します。

  • java.base
  • javafx.base
  • javafx.controls
  • javafx.fxml
  • javafx.graphics

※javafx.graphicsはjavafx.controlsに依存している様で、実際はgraphicsは不要になります
※「見つかりません」は、外部jarとして取り込んだkuromoji君です。彼は手順1でlibへコピー済みですので、ここでは無視します。


以下の様に、jlinkコマンドにこれらのモジュールを与えて実行。
これで、jre-minという配布アプリケーション専用のJREが出来ました。

jlink --compress=2 --module-path "※アプリケーション作成に使用したJREのパスを記載※\pleiades\java\11.0.2\jmods" --add-modules java.base,javafx.base,javafx.controls,javafx.fxml --output jre-min

手順3.配布用のjarをexe化する

最後に、jarをexe形式にラッピングして、どの環境でもダブルクリック等で起動してくれる様にしましょう。
今回は、Launch4jというラッピングツールを用いて実施しました。

こちらからダウンロード/インストール。
以下を設定の上、歯車のアイコンを押下すると実行されます。


設定事項 設定内容
Outputfile exeファイルの出力先を指定(今回は配布したいので、JRE(jre-minフォルダ)と同じ階層を指定
jar 手順1で作成したjarファイルを指定
Bundle JRE Pass 手順2で作成したJREを指定(保管先に依存しない様に、exeの相対パスで指定)
Min JRE version 必須項目の様なので、JREのバージョンを記載する

image.png

image.png


exeファイルが生成されました。実行してみましょう。
アプリケーションが起動すれば成功です!

image.png


以上より作成したexeやjreの入ったフォルダを、zipで固めるなどして配布するイメージです。
ソース等と共にGitに置いてあります(export.zip)

無題.png


参考資料

ketman55
学んだことを書き溜めていきます。 (投稿内容は私個人の見解であり、所属する組織の公式見解ではありません。)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away