jlink

jlinkツールは、一連のモージュールとその依存性をカスタム・ランタイム・イメージとしてアセンブルして最適化する場合に使用できます。

形式

jlink [options] --module-path modulepath --add-modules module [, module...]
options

スペースで区切ったコマンド行オプション。「jlinkのオプション」を参照してください。

modulepath

jlinkツールで参照可能なモジュールを検出するパス。これらのモジュールは、モジュラJARファイル、JMODファイル、展開したモジュールのいずれかです。

module

ランタイム・イメージに追加するモジュールの名前。jlinkツールにより、これらのモジュールとその推移的な依存性が追加されます。

説明

jlinkツールでは、一連のモジュールをその推移的な依存性とともにリンクして、カスタム・ランタイム・イメージを作成します。

ノート:

開発者は、カスタム・ランタイム・イメージの更新を担当します。

jlinkのオプション

--add-modules mod[, mod...]

指定のモジュールmodをルート・モジュールのデフォルト・セットに追加します。ルート・モジュールのデフォルト・セットは空です。

--bind-services

サービス・プロバイダ・モジュールとその依存性をリンクします。

-c={0|1|2}または--compress={0|1|2}

リソースの圧縮を有効にします。

  • 0: 圧縮なし
  • 1: 定数文字列の共有
  • 2: ZIP
--disable-plugin pluginname

指定されたプラグインを無効にします。サポートされるプラグインのリストは、「jlinkのプラグイン」を参照してください。

--endian {little|big}

生成されるイメージのバイト順を指定します。デフォルト値は、システムのアーキテクチャの形式です。

-hまたは--help

ヘルプ・メッセージを出力します。

--ignore-signing-information

ランタイム・イメージ内で署名付きモジュラJARがリンクされている場合、致命的エラーを抑制します。署名付きモジュラJARの署名関連ファイルは、ランタイム・イメージにコピーされません。

--launcher command=moduleまたは--launcher command=module/main

モジュールのランチャ・コマンド名またはモジュールおよびメイン・クラスのコマンド名(モジュールとメイン・クラス名はスラッシュ(/)で区切ります)を指定します。

--limit-modules mod[, mod...]

参照可能なモジュールの領域を、指定されたモジュールmodの推移閉包内にあるモジュールと、メイン・モジュール(存在する場合)、さらに--add-modulesオプションで指定されたその他のモジュールに制限します。

--list-plugins

コマンド行オプションによってアクセスできる使用可能なプラグインをリストします。「jlinkのプラグイン」を参照してください。

-pまたは--module-path modulepath

モジュール・パスを指定します。

このオプションが指定されていない場合、デフォルトのモジュール・パスは$JAVA_HOME/jmodsとなります。このディレクトリには、java.baseモジュールとその他の標準モジュールおよびJDKモジュールが格納されています。このオプションが指定されていてもjava.baseモジュールを解決できない場合、jlinkコマンドは$JAVA_HOME/jmodsをモジュール・パスに追加します。

--no-header-files

ヘッダー・ファイルを除外します。

--no-man-pages

manページを除外します。

--output path

生成されるランタイム・イメージの場所を指定します。

--save-opts filename

指定されたファイルにjlinkのオプションを保存します。

--suggest-providers [name, ...]

指定されたサービス・タイプをモジュール・パスから実装するプロバイダを推奨します。

--version

バージョン情報を出力します。

@filename

指定されたファイルからオプションを読み取ります。

オプション・ファイルとは、オプションと、通常コマンド・プロンプトに入力する値が含まれるテキスト・ファイルです。オプションは、1行で書き込まれることも、複数行で書き込まれることもあります。パス名の環境変数を指定しなくてもかまいません。行の先頭にハッシュ記号(#)を付けると、その行をコメント・アウトできます。

jlinkコマンドのオプション・ファイルの例を次に示します。

#Wed Dec 07 00:40:19 EST 2016
--module-path mlib
--add-modules com.greetings
--output greetingsapp

jlinkのプラグイン

ノート:

この項に記載されていないプラグインは、サポートされておらず、変更される可能性があります。

pattern-listを必要とするプラグイン・オプションの場合、値は要素のカンマ区切りのリストで、各要素では次の形式のいずれかを使用します。

  • glob-pattern
  • glob:glob-pattern
  • regex:regex-pattern
  • @filename
    • filenameは、使用されるパターン(行ごとに1パターン)が含まれるファイルの名前です。

すべての使用可能なプラグインの詳細リストを表示するには、コマンドjlink --list-pluginsを実行します。

表2-4 jlinkのプラグインのリスト

プラグイン名 オプション 説明

compress

--compress={0|1|2}[:filter=pattern-list]

出力イメージのすべてのリソースを圧縮します。

  • レベル0: 圧縮なし
  • レベル1: 定数文字列の共有
  • レベル2: ZIP

含めるファイルのパターンをリストする場合、オプションのpattern-listフィルタを指定できます。

include-locales

--include-locales=langtag[,langtag]*

langtagがBCP 47言語タグであるロケールのリストを組み込みます。このオプションは、RFC 4647で定義されているロケール・マッチングをサポートしています。このオプションを使用する場合は、必ずモジュールjdk.localedataを追加します。

例:

--add-modules jdk.localedata --include-locales=en,ja,*-IN

order-resources

--order-resources=pattern-list

指定されたパスを優先順位で並べます。@filenameが指定されている場合、pattern-listの各行は順序付けられるパスと完全に一致する必要があります。

例:

--order-resources=/module-info.class,@classlist,/java.base/java/lang/

strip-debug

--strip-debug

出力イメージからデバッグ情報を削除します

jlinkの例

次のコマンドは、ディレクトリgreetingsappでランタイム・イメージを作成します。このコマンドは、モジュールcom.greetingsをリンクします(このモジュールの定義は、ディレクトリmlibに格納されています)。

jlink --module-path mlib --add-modules com.greetings --output greetingsapp

次のコマンドは、ランタイム・イメージgreetingsapp内のモジュールをリストします。

greetingsapp/bin/java --list-modules
com.greetings
java.base@11
java.logging@11
org.astro@1.0

次のコマンドは、ディレクトリcompressedrtでデバッグ記号が削除されたランタイム・イメージを作成し、圧縮を使用して領域を削減し、フランス語の言語ロケール情報を含めます。

jlink --add-modules jdk.localedata --strip-debug --compress=2 --include-locales=fr --output compressedrt

次の例では、ランタイム・イメージcompressedrt (デバッグ記号が削除されておらず、圧縮を使用していない)のサイズをfr_rtと比較します。

jlink --add-modules jdk.localedata --include-locales=fr --output fr_rt

du -sh ./compressedrt ./fr_rt
23M     ./compressedrt
36M     ./fr_rt

次の例では、java.security.Providerを実装するプロバイダをリストします。

jlink --suggest-providers java.security.Provider

Suggested providers:
  java.naming provides java.security.Provider used by java.base
  java.security.jgss provides java.security.Provider used by java.base
  java.security.sasl provides java.security.Provider used by java.base
  java.smartcardio provides java.security.Provider used by java.base
  java.xml.crypto provides java.security.Provider used by java.base
  jdk.crypto.cryptoki provides java.security.Provider used by java.base
  jdk.crypto.ec provides java.security.Provider used by java.base
  jdk.crypto.mscapi provides java.security.Provider used by java.base
  jdk.security.jgss provides java.security.Provider used by java.base

次の例では、java.namingおよびjdk.crypto.cryptokiとその依存性のみが含まれ、他のプロバイダは含まれないmybuildという名前のカスタム・ランタイム・イメージを作成します。これらの依存性は、モジュール・パスに存在する必要があります。

jlink --add-modules java.naming,jdk.crypto.cryptoki --output mybuild

次のコマンドは、greetingsappという名前のランタイム・イメージを作成するコマンドと似ていますが、ルート・モジュールから解決されるモジュールとサービス・バインディングをリンクする点が異なります。Configuration.resolveAndBindメソッドを参照してください。

jlink --module-path mlib --add-modules com.greetings --output greetingsapp --bind-services

次のコマンドは、このコマンドで作成されたランタイム・イメージgreetingsapp内のモジュールをリストします。

greetingsapp/bin/java --list-modules
com.greetings
java.base@11
java.compiler@11
java.datatransfer@11
java.desktop@11
java.logging@11
java.management@11
java.management.rmi@11
java.naming@11
java.prefs@11
java.rmi@11
java.security.jgss@11
java.security.sasl@11
java.smartcardio@11
java.xml@11
java.xml.crypto@11
jdk.accessibility@11
jdk.charsets@11
jdk.compiler@11
jdk.crypto.cryptoki@11
jdk.crypto.ec@11
jdk.crypto.mscapi@11
jdk.internal.opt@11
jdk.jartool@11
jdk.javadoc@11
jdk.jdeps@11
jdk.jfr@11
jdk.jlink@11
jdk.localedata@11
jdk.management@11
jdk.management.jfr@11
jdk.naming.dns@11
jdk.naming.rmi@11
jdk.security.auth@11
jdk.security.jgss@11
jdk.zipfs@11
org.astro@1.0