jmod
ツールは、JMODファイルを作成したり、既存のJMODファイルの内容をリストする場合に使用します。
形式
jmod (create|extract|list|describe|hash) [options] jmod-file
次の情報が含まれます。
主要な操作モード
create
新しいJMODアーカイブ・ファイルを作成します。
extract
JMODアーカイブ・ファイルからすべてのファイルを抽出します。
list
すべてのエントリの名前を出力します。
describe
モジュールの詳細を出力します。
hash
リーフ・モジュールを特定し、直接または間接的にそれらを必要とする依存性のハッシュを記録します。
オプション
options
「jmodのオプション」を参照してください。
必須
説明
注意:
モジュールをモジュール・パスにデプロイしたり、Mavenリポジトリに公開するなど、ほとんどの開発タスクの場合、引き続きモジュールをモジュラJARファイルにパッケージ化します。jmod
ツールは、ネイティブ・ライブラリまたは他の構成ファイルを持つモジュールまたはjlink
ツールを使用してランタイム・イメージにリンクするモジュールを対象としています。JMODファイル形式を使用すると、.class
ファイル以外のファイル、メタデータおよびリソースを集約できます。この形式は転送可能ですが、実行可能ではありません。つまり、コンパイル時やリンク時に使用することはできますが、実行時には使用できません。
jmod
オプションの多くは、内容が結果のJMODファイルにコピーされるパスの指定を含みます。このようなオプションでは、サブディレクトリとその内容を含め、指定されたパスの内容をすべてコピーしますが、名前が--exclude
オプションで指定されたパターンと一致するファイルは除外します。
--hash-modules
オプションまたはjmod hash
コマンドを使用すると、各モジュールのディスクリプタに、そのモジュールに依存できるモジュールの内容のハッシュを記録でき、このようにしてこれらのモジュールを"結び付ける"ことができます。これにより、パッケージを1つ以上の特定の名前が付けられたモジュールにエクスポートしたり、修飾されたエクスポートによってそれ以外にはエクスポートしないようにできます。ランタイムでは、記録されたモジュールのハッシュが実行時に解決されたものと一致するかどうかを検証し、一致しない場合はエラーを返します。
jmodのオプション
--class-path path
アプリケーションJARファイルまたは結果のJMODファイルにコピーするクラスが格納されているディレクトリの場所を指定します。
--cmds path
結果のJMODファイルにコピーするネイティブ・コマンドの場所を指定します。
--config path
結果のJMODファイルにコピーするユーザーが編集可能な構成ファイルの場所を指定します。
–-dir path
jmod
で指定のJMODアーカイブから抽出されたファイルを置く場所を指定します。
--dry-run
ハッシュ・モードの試験的な実行を実行します。ハッシュ値を記録せずに、リーフ・モジュールとそれに必要なモジュールを特定します。
--exclude pattern–list
指定されたカンマ区切りのパターン・リスト(各要素は次のいずれかの形式)と一致するファイルを除外します。
glob-pattern
glob:glob-pattern
regex:regex-pattern
glob-pattern
の構文は、FileSystem.getPathMatcherメソッドを参照してください。正規表現を表すregex-pattern
の構文は、Patternクラスを参照してください。
--hash-modules regex-pattern
指定されたregex-pattern
と一致するモジュールのモジュール・グラフに基づいて、リーフ・モジュールを特定し、直接または間接的にそれらを必要とする依存性のハッシュを記録します。ハッシュは、作成されるJMODアーカイブ・ファイルに、あるいはjmod hash
コマンドで指定されたモジュール・パス上のJMODアーカイブまたはモジュラJARに記録されます。
--header-files path
結果のJMODファイルにコピーするヘッダー・ファイルの場所を指定します。
--help
または-h
使用方法が表示されます。
--help-extra
追加オプションのヘルプを出力します。
–-legal-notices path
結果のJMODファイルにコピーする法律上の注意点の場所を指定します。
--libs path
結果のJMODファイルにコピーするネイティブ・ライブラリの場所を指定します。
--main-class class-name
module-info.class
ファイルに記録するメイン・クラスを指定します。
--man-pages path
結果のJMODファイルにコピーするmanページの場所を指定します。
--module-version module-version
module-info.class
ファイルに記録するモジュール・バージョンを指定します。
--module-path path
または-p path
モジュール・パスを指定します。このオプションは、--hash-modules
も指定する場合に必要です。
--target-platform platform
ターゲット・プラットフォームを指定します。
--version
jmod
ツールのバージョン情報を出力します。
@filename
指定されたファイルからオプションを読み取ります。
オプション・ファイルとは、オプションと、通常コマンド・プロンプトに入力する値が含まれるテキスト・ファイルです。オプションは、1行で書き込まれることも、複数行で書き込まれることもあります。パス名の環境変数を指定しなくてもかまいません。行の先頭にハッシュ記号(#
)を付けると、その行をコメント・アウトできます。
jmod
コマンドのオプション・ファイルの例を次に示します。
#Wed Dec 07 00:40:19 EST 2016 create --class-path mods/com.greetings --module-path mlib --cmds commands --config configfiles --header-files src/h --libs lib --main-class com.greetings.Main --man-pages man --module-version 1.0 --os-arch "x86_x64" --os-name "Mac OS X" --os-version "10.10.5" greetingsmod
jmodの追加オプション
jmodのオプションで説明されているオプションに加えて、次の追加オプションをコマンドとともに使用できます。
jmod createの例
JMODファイルの作成の例を次に示します。
jmod create --class-path mods/com.greetings --cmds commands --config configfiles --header-files src/h --libs lib --main-class com.greetings.Main --man-pages man --module-version 1.0 --os-arch "x86_x64" --os-name "Mac OS X" --os-version "10.10.5" greetingsmod
jmod hashの例
次の例では、リーフ・モジュール(この例では、ma
)を必要なモジュール(mb
)とリンクしようとし、必要なモジュールに記録されたハッシュ値がリーフ・モジュールのハッシュ値と一致しないときの動作を示します。
次の.java
ファイルを作成してコンパイルします。
jmodhashex/src/ma/module-info.java
module ma { requires mb; }
jmodhashex/src/mb/module-info.java
module mb { }
jmodhashex2/src/ma/module-info.java
module ma { requires mb; }
jmodhashex2/src/mb/module-info.java
module mb { }
モジュールごとにJMODアーカイブを1つ作成します。ディレクトリjmodhashex/jmods
およびjmodhashex2/jmods
を作成した後、次のコマンドをjmodhashex
ディレクトリから、次にjmodhashex2
ディレクトリから実行します。
jmod create --class-path mods/ma jmods/ma.jmod
jmod create --class-path mods/mb jmods/mb.jmod
必要に応じて、jmod hash
コマンドをプレビューします。次のコマンドをjmodhashex
ディレクトリから実行します。
jmod hash --dry-run -module-path jmods --hash-modules .*
このコマンドにより、次のように出力されます。
Dry run: mb hashes ma SHA-256 07667d5032004b37b42ec2bb81b46df380cf29e66962a16481ace2e71e74073a
これは、jmod hash
コマンド(--dry-run
オプションの指定なし)がリーフ・モジュールma
のハッシュ値をモジュールmb
に記録することを示しています。
jmodhashex
ディレクトリに格納されているJMODアーカイブ・ファイルにハッシュ値を記録します。次のコマンドをjmodhashex
ディレクトリから実行します。
jmod hash --module-path jmods --hash-modules .*
このコマンドにより、次のように出力されます。
Hashes are recorded in module mb
jmodhashex
ディレクトリに格納されている各JMODアーカイブに関する情報を出力します。jmodhashex
ディレクトリから強調表示されているコマンドを実行します。
jmod describe jmods/ma.jmod ma requires mandated java.base requires mb jmod describe jmods/mb.jmod mb requires mandated java.base hashes ma SHA-256 07667d5032004b37b42ec2bb81b46df380cf29e66962a16481ace2e71e74073a
ディレクトリjmodhashex
のモジュールmb
を除いて、ディレクトリjmodhashex2
のモジュールma
が含まれるランタイム・イメージの作成を試みます。jmodhashex2
ディレクトリから次のコマンドを実行します。
Oracle Solaris、LinuxおよびOS X: jlink --module-path $JAVA_HOME/jmods:jmods/ma.jmod:../jmodhashex/jmods/mb.jmod --add-modules ma --output ma-app
Windows: jlink --module-path %JAVA_HOME%/jmods;jmods/ma.jmod;../jmodhashex/jmods/mb.jmod --add-modules ma --output ma-app
次のようなエラー・メッセージが出力されます。
Error: Hash of ma (a2d77889b0cb067df02a3abc39b01ac1151966157a68dc4241562c60499150d2) differs to expected hash (07667d5032004b37b42ec2bb81b46df380cf29e66962a16481ace2e71e74073a) recorded in mb