jlinkのガイド

1. 概要

  • https://docs.oracle.com/javase/9​​/tools/jlink.htm#JSWOR-GUID-CECAC52B-CFEE-46CB-8166-F17A8E9280E9 [jlink]は、次のもののみを含むカスタムJavaランタイムイメージを生成するツールです。特定のアプリケーションに必要なプラットフォームモジュール。*

    このようなランタイムイメージはJREとまったく同じように機能しますが、選択したモジュールと機能するために必要な依存関係のみが含まれています。 モジュラーランタイムイメージの概念は、https://openjdk.java.net/jeps/220 [JEP 220]で紹介されました。
    このチュートリアルでは、_jlink_を使用してカスタムJREを作成する方法を学習し、JRE内でモジュールが正しく機能することを実行およびテストします。

2. カスタムJREを作成する必要がある

例を使用して、カスタムランタイムイメージの背後にある動機を理解しましょう。
シンプルなモジュラーアプリケーションを作成します。 モジュラーアプリケーションの作成の詳細については、https://www.baeldung.com/java-9-modularity [モジュール性に関する記事]を参照してください。
最初に、_HelloWorld_クラスと対応するモジュールを作成しましょう。
public class HelloWorld {
    private static final Logger LOG = Logger.getLogger(HelloWorld.class.getName());
    public static void main(String[] args) {
        LOG.info("Hello World!");
    }
}
module jlinkModule {
    requires java.logging;
}
このプログラムを実行するには、_HelloWorld、_ _String _、_ Logger_、および__Object __classesのみが必要です。
このプログラムの実行に必要なクラスは4つだけですが、プログラムで必要とされていなくても、JREのすべての定義済みクラスも実行されます。
したがって、小さなプログラムを実行するには、完全なJREを維持する必要がありますが、これは単にメモリの無駄です。
したがって、サンプルを実行するには、カスタマイズされたJREが最適なオプションです。
  • _jlink_を使用すると、メモリを無駄にすることなく、使用する関連クラスのみを含む独自の小さなJREを作成できます。その結果、パフォーマンスが向上します。*

3. カスタムJavaランタイムイメージの構築

一連の簡単な手順を実行して、カスタムJREイメージを作成します。

3.1. モジュールのコンパイル

まず、コマンドラインから上記のプログラムをコンパイルしましょう。
javac -d out module-info.java
javac -d out --module-path out com\baeldung\jlink\HelloWorld.java
それでは、プログラムを実行しましょう。
java --module-path out --module jlinkModule/com.baeldung.jlink.HelloWorld
出力は次のようになります。
Mar 13, 2019 10:15:40 AM com.baeldung.jlink.HelloWorld main
INFO: Hello World!

3.2. _jdeps_を使用して依存モジュールを一覧表示する

_jlink_を使用するには、アプリケーションが使用し、カスタムJREに含める必要があるJDKモジュールのリストを知る必要があります。
を使用して、アプリケーションで使用される依存モジュールを取得します。
jdeps --module-path out -s --module jlinkModule
出力は次のようになります。
jlinkModule -> java.base
jlinkModule -> java.logging
_java.base_はJavaコードライブラリに必要な最小モジュールであり、_java.logging_はプログラムのロガーによって使用されるため、これは理にかなっています。
モジュールベースのアプリケーション用のカスタムJREを作成するには、_jlink_コマンドを使用できます。 基本的な構文は次のとおりです。
jlink [options] –module-path modulepath
  –add-modules module [, module…]
  --output <target-directory>
それでは、Java 11を使用して*プログラム用のカスタムJREを作成しましょう*。
jlink --module-path "%JAVA_HOME%\jmods";out
  --add-modules jlinkModule
  --output customjre
ここで、_†"add-modules_パラメーターの後の値は、JREに含めるモジュールを_jlink_に指示します。
最後に、_†"output_パラメーターの隣の__customjre ___は、カスタムJREを生成するターゲットディレクトリを定義します。

3.4. 生成されたイメージを使用したアプリケーションの実行

これで、_jlink_によって作成されたカスタムJREができました。
JREをテストするには、_customjre_ディレクトリの_bin_フォルダー内を移動してモジュールを実行し、以下のコマンドを実行してみましょう。
java --module jlinkModule/com.baeldung.jlink.HelloWorld

4. ランチャースクリプトを使用したカスタムJREの作成

オプションで、実行可能な_launcher_スクリプトを使用して*カスタムJREを作成することもできます*。
このためには、モジュールとメインクラスでランチャーを作成するために、** extra _–launcher_パラメーターを持つ__jlink __commandを実行する必要があります*。
jlink --launcher customjrelauncher=jlinkModule/com.baeldung.jlink.HelloWorld
  --module-path "%JAVA_HOME%\jmods";out
  --add-modules jlinkModule
  --output customjre
これにより、_customjre / bin_ディレクトリ内に2つのスクリプトcustom_customjrelauncher.bat_および__customjrelauncher __が生成されます。
スクリプトを実行してみましょう。
customjrelauncher.bat
そして出力は次のようになります。
Mar 18, 2019 12:34:21 AM com.baeldung.jlink.HelloWorld main
INFO: Hello World!

5. 結論

このチュートリアルでは、モジュールに必要な最低限のファイルのみを含む_jlink_を使用して、カスタムのモジュラーJREを作成する方法を学びました。 また、簡単に実行して出荷できるランチャースクリプトを使用してカスタムJREを作成する方法も検討しました。
カスタムのモジュール式Javaランタイムイメージは強力です。 *カスタムJREを作成する目的は明確です。メモリを節約し、パフォーマンスを向上させ、セキュリティと保守性を向上させます。*軽量のカスタムJREを使用すると、小型デバイス用のスケーラブルなアプリケーションを作成できます。
このチュートリアルで使用されるコードスニペットは、https://github.com/eugenp/tutorials/tree/master/core-java-modules/core-java-11 [Githubで利用可能]です。