このページについて
プロジェクトでツールが欲しいとなると、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の隣のサブフォルダーに必須ライブラリーをコピー」を選択
実行可能jarと外部ライブラリ入りのフォルダが作成されました。
手順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のバージョンを記載する |
exeファイルが生成されました。実行してみましょう。
アプリケーションが起動すれば成功です!
以上より作成したexeやjreの入ったフォルダを、zipで固めるなどして配布するイメージです。
※ソース等と共にGitに置いてあります(export.zip)