ダウンロード サンプルファイル (13.5 KB)
アプリケーションの実行時イメージを作成する
Javaのアプリケーションを配布したい場合にはJVM自体も含めて配布したいケースが多々あります。そのような場合に利用できるツールとして、Java 9では、jlinkというツールが提供されました。
似たケースとして、Java 8でもアプリケーションを配布するためにjavapackagerというツールが用意されています。こちらのツールはインストーラーも含めて作成するツールですが、jlinkは実行イメージを作成します。
インストーラーまでは提供していないので、インストーラーが必要ない方やzipやtarなどアーカイブ形式で十分な方にはよりよいツールといえます。
また、IoT機器への組み込みや、Dockerといったコンテナ上でJavaを実行する際にも適した形式といえます。実際に、図3のように用意されたファイルがある場合の実行イメージを作成する方法を紹介します。
また、サンプルではこのアプリケーション用jarファイルには、先ほど作成したMulti-Release Jar Filesの紹介で作成したmrjar.jarファイルと、Appというクラスをコンパイルして作成したjarファイルが用意されていることを前提とします。
すでにjarファイルがある前提なのは、jlinkにはclassファイルではなく、モジュール対応されたjarファイルが必要なためです。
jarファイルを作成する行程の説明は省略しますが、実際の作業はこれまでの記事やリファレンス等を参考にしてください。または、サンプルコード内にはgradleにてjarファイルを作成するための設定ファイルを用意しているので、そちらを利用してください。
リスト7がjlinkコマンドを実行した例です。
$JAVA_HOME/bin/jlink \ --module-path $JAVA_HOME/jmods:libs:build/libs \ (1) --add-modules com.coltware.main \ (2) --launcher app=com.coltware.main/com.coltware.main.App \ (3) --output dist (4)
(1)ではモジュールパスを指定します。javaコマンドと異なり、$JAVA_HOME/jmodsというJava内部で管理されているモジュールファイルへのパスと、用意したjarファイルが保存されているパスを指定します。
(2)では、利用するモジュール名を指定します。こちらは、javaコマンドを実行するときの指定と同じです。また、(3)の"--launcher"指定は、実行ファイルと実行するモジュール、さらにそのクラスを指定します。少々わかりにくいのですが、後述する実行コマンドの作成を指定しています。そして、(4)では実行イメージの出力パスを指定します。
そして、このコマンドにて出力されたイメージでプログラムを実行するにはリスト8のコマンドを実行します。
cd dist ./bin/app
このappというコマンドが(3)にて指定したappの部分に相当します。そして、このappファイルの内容がリスト9になります。
#!/bin/sh JLINK_VM_OPTIONS= DIR=`dirname $0` $DIR/java $JLINK_VM_OPTIONS -m com.coltware.main/com.coltware.main.App $@
コードを見ると単純にjavaコマンドを実行していることがわかりますが、モジュール対応されたにもかかわらずモジュール指定が一切されていないことがわかります。
これは、実行イメージの中に指定したモジュールjarファイルが、Java内部のモジュールと同様の位置づけですでに取り込まれているためです。
したがって、実行イメージ内には作成したjarファイルが見つかりません。そのため、ファイル名を見ただけではどのようなモジュールが含まれているかがわかりにくくなってしまいます。実際に取り込まれたモジュール一覧を参照するためには、リスト10のようにjavaコマンドの--list-modulesオプションを使って実行することで確認できます。
$cd dist $./bin/java --list-modules com.coltware.main com.coltware.mrlib java.base@9
この記事は参考になりましたか?
- Java 9で「変わること」と、Javaのこれまで連載記事一覧
-
- 作成したライブラリの公開と実行イメージの作成
- 知っていると得する! Java 9になってより便利になった改善点
- リアクティブストリームとCompletableFutureの改善
- この記事の著者
-
WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)
< WINGSプロジェクト について> 有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 ...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
