SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Java 9で「変わること」と、Javaのこれまで

作成したライブラリの公開と実行イメージの作成

Java 9で「変わること」と、Javaのこれまで 第7回


  • X ポスト
  • このエントリーをはてなブックマークに追加

アプリケーションの実行時イメージを作成する

 Javaのアプリケーションを配布したい場合にはJVM自体も含めて配布したいケースが多々あります。そのような場合に利用できるツールとして、Java 9では、jlinkというツールが提供されました。

 似たケースとして、Java 8でもアプリケーションを配布するためにjavapackagerというツールが用意されています。こちらのツールはインストーラーも含めて作成するツールですが、jlinkは実行イメージを作成します。

 インストーラーまでは提供していないので、インストーラーが必要ない方やzipやtarなどアーカイブ形式で十分な方にはよりよいツールといえます。

 また、IoT機器への組み込みや、Dockerといったコンテナ上でJavaを実行する際にも適した形式といえます。実際に、図3のように用意されたファイルがある場合の実行イメージを作成する方法を紹介します。

 また、サンプルではこのアプリケーション用jarファイルには、先ほど作成したMulti-Release Jar Filesの紹介で作成したmrjar.jarファイルと、Appというクラスをコンパイルして作成したjarファイルが用意されていることを前提とします。

図3 jlinkで用いるサンプルファイルの構造
図3 jlinkで用いるサンプルファイルの構造

 すでにjarファイルがある前提なのは、jlinkにはclassファイルではなく、モジュール対応されたjarファイルが必要なためです。

 jarファイルを作成する行程の説明は省略しますが、実際の作業はこれまでの記事やリファレンス等を参考にしてください。または、サンプルコード内にはgradleにてjarファイルを作成するための設定ファイルを用意しているので、そちらを利用してください。

 リスト7がjlinkコマンドを実行した例です。

リスト7 作成されたjarファイルの中身
$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のコマンドを実行します。

リスト8 作成された実行イメージの実行方法
cd dist
./bin/app

 このappというコマンドが(3)にて指定したappの部分に相当します。そして、このappファイルの内容がリスト9になります。

リスト9 appプログラム内のコード
#!/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オプションを使って実行することで確認できます。

リスト10 作成された実行イメージの実行方法
$cd dist
$./bin/java --list-modules
com.coltware.main
com.coltware.mrlib
java.base@9

次のページ
今後のJavaについて

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Java 9で「変わること」と、Javaのこれまで連載記事一覧

もっと読む

この記事の著者

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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10764 2018/04/19 11:31

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング