jlink
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_はプログラムのロガーによって使用されるため、これは理にかなっています。
3.3. _jlink_を使用したカスタムJREの作成
モジュールベースのアプリケーション用のカスタム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で利用可能]です。