jar
コマンドは、クラスおよびリソースのアーカイブを作成したり、個々のクラスまたはリソースをアーカイブから操作または復元する場合に使用できます。
形式
jar [OPTION...] [ [--release VERSION] [-C dir] files] ...
説明
jar
コマンドは、ZIPおよびZLIBの圧縮形式に基づいた汎用のアーカイブおよび圧縮ツールです。jar
コマンドは当初、Javaアプレットやアプリケーションをパッケージ化することを目的としていましたが、JDK 9以降は、モジュラJARの作成にjar
コマンドを使用できます。転送やデプロイの場合は通常、モジュールをモジュラJARとしてパッケージ化した方が便利です。
jar
コマンドの構文は、tar
コマンドの構文と似ています。必須の操作引数のいずれかで定義された複数の主要な操作モードがあります。その他の引数は、操作の動作を変更するオプションと、操作を実行するために必要なオペランドのいずれかです。
注意:
アプレットAPIは、JDK 9で使用可能でありサポートされていますが、将来のリリースでの削除に備えて非推奨とマークされています。アプレットのかわりに、Java Web Startまたは自己完結型アプリケーションなどの代替を検討してください。モジュールまたはアプレットやアプリケーションのコンポーネント(ファイル、イメージおよびサウンド)が1つのアーカイブに結合されていると、Javaエージェント(ブラウザなど)は、それらのコンポーネントを1回のHTTPトランザクションでダウンロードすることができ、コンポーネントごとに新しい接続を必要とすることがありません。これによって、ダウンロードの回数が大幅に減ります。また、jar
コマンドはファイルを圧縮するので、ダウンロード時間もさらに短くなります。また、jar
コマンドを使用すると、ファイル内の個々のエントリに署名を書き込めるので、配布元の認証が可能になります。JARファイルは、圧縮されているかどうかにかかわらず、クラス・パスのエントリとして使用できます。
特定のディレクトリのルートまたは.jar
アーカイブのルートにモジュール・ディスクリプタmodule-info.class
を含めると、アーカイブはモジュラJARになります。次の操作(「作成および更新モードでのみ有効な操作修飾子」を参照)は、モジュラJARの作成または更新時、あるいは既存の非モジュラJARの更新時にのみ有効です。
--module-version
--hash-modules
--module-path
注意:
長形式のオプションの必須引数またはオプション引数はすべて、対応する短形式のオプションに対しても必須またはオプションです。
主要な操作モード
jar
コマンドを使用する際、実行する操作を指定する必要があります。jar
コマンドの操作モードを指定するには、この項で説明されている適切な操作引数を含めます。操作引数と他の1文字オプションを同時に使用できます。一般に、操作引数はコマンド行に指定する最初の引数です。
任意のモードで有効な操作修飾子
次のオプションは、jar
コマンドに含めた操作モードの動作をカスタマイズするのに使用できます。
-C DIR
指定されたディレクトリを変更し、コマンド行の最後に指定されたファイルを格納します。
jar [OPTION...] [ [--release VERSION] [-C dir] files]
-f=FILE
または--file=FILE
アーカイブ・ファイル名を指定します。
--release VERSION
マルチリリースJARファイルを作成します。オプションの後に指定されたすべてのファイルをMETA-INF/versions/VERSION/
(VERSIONは値が9以上の正の整数であること)という名前のJARファイルのバージョニングされたディレクトリに格納します。
実行時、JAR内にクラスのバージョンが複数存在する場合、JDKでは初めに、VERSION番号がJDKのメジャー・バージョン番号と一致するディレクトリ・ツリーで検索し、最初に検出されたバージョンを使用します。その後、順次低いVERSION番号のディレクトリを調べ、最終的にJARのルートを調べます。
-v
または--verbose
詳細出力を標準出力に送信または出力します。
作成および更新モードでのみ有効な操作修飾子
次のオプションは、作成および更新の主要操作モードの動作をカスタマイズするのに使用できます。
—e=CLASSNAME
または--main-class=CLASSNAME
モジュラJARファイルまたは実行可能なモジュラJARファイルにバンドルされたスタンドアロン・アプリケーションのアプリケーション・エントリ・ポイントを指定します。
-m=FILE
または--manifest=FILE
指定されたマニフェスト・ファイルからマニフェスト情報を含めます。
-M
または--no-manifest
エントリに対してマニフェスト・ファイルを作成しません。
--module-version=VERSION
モジュラJARファイルの作成または更新時、あるいは非モジュラJARファイルの更新時にモジュール・バージョンを指定します。
--hash-modules=PATTERN
指定されたパターンで一致し、モジュラJARファイルの作成時または非モジュラJARファイルの更新時に、直接または間接的に依存しているモジュールのハッシュを計算および記録します。
-p
または--module-path
ハッシュを生成するためのモジュール依存性の場所を指定します。
@files
テキスト・ファイルからjar
オプションおよびファイル名を読み取ります。
作成、更新および索引生成モードでのみ有効な操作修飾子
次のオプションは、作成(—c
または--create
)、更新(—u
または--update
)および索引生成(—i
または--generate-index=FILE
)の主要操作モードの動作をカスタマイズするのに使用できます。
その他のオプション
次のオプションは、jar
コマンドで認識されますが、操作モードでは使用されません。
jarコマンド構文の例
classes.jar
を作成します。このアーカイブには、2つのクラス・ファイルFoo.class
およびBar.class
が含まれます。jar --create --file classes.jar Foo.class Bar.class
mymanifest
を使用して、アーカイブclasses.jar
を作成します。このアーカイブには、ディレクトリfoo/
内の全ファイルが含まれます。jar --create --file classes.jar --manifest mymanifest -C foo/
foo.jar
を作成します。モジュール・ディスクリプタはclasses/module-info.class
にあります。jar --create --file foo.jar --main-class com.foo.Main --module-version 1.0 -C foo/classes resources
foo.jar
をモジュラJARファイルに更新します。jar --update --file foo.jar --main-class com.foo.Main --module-version 1.0 -C foo/module-info.class
foo.jar
を作成し、classes
ディレクトリ内のファイルをJARのルートに、classes—9
ディレクトリのファイルをJARのMETA-INF/versions/9
ディレクトリに格納します。この例では、classes/com/foo
ディレクトリに2つのクラスcom.foo.Hello
(エントリ・ポイント・クラス)およびcom.foo.NameProvider
があり、いずれもJDK 8用にコンパイルされています。classes-9/com/foo
ディレクトリには異なるバージョンのcom.foo.NameProvider
クラスがあり、これはJDK 9固有のコードが含まれており、JDK 9用にコンパイルされているクラスです。
このセットアップの場合、ディレクトリclasses
およびclasses-9
が格納されているディレクトリから次のコマンドを実行して、マルチリリースJARファイルfoo.jar
を作成します。
jar --create --file foo.jar --main-class com.foo.Hello -C classes . --release 9 -C classes-9 .
この時点で、JARファイルfoo.jar
の内容は次のとおりです。
% jar -tf foo.jar META-INF/ META-INF/MANIFEST.MF com/ com/foo/ com/foo/Hello.class com/foo/NameProvider.class META-INF/versions/9/com/ META-INF/versions/9/com/foo/ META-INF/versions/9/com/foo/NameProvider.class
その他の情報に加えて、ファイルMETA-INF/MANIFEST.MF
には、これがcom.foo.Hello
のエントリ・ポイントが含まれるマルチリリースJARファイルであることを示す次の行が含まれます。
... Main-Class: com.foo.Hello Multi-Release: true
com.foo.Hello
クラスがcom.foo.NameProvider
クラスでメソッドを呼び出すとして、JDK 9を使用しているプログラムを実行すると、必ずcom.foo.NameProvider
クラスはMETA-INF/versions/9/com/foo/
内にあります。JDK 8を使用しているプログラムを実行すると、必ずcom.foo.NameProvider
クラスはJARのルート、com/foo
内にあります。
classes.list
から読み取って、アーカイブmy.jar
を作成します。注意:
jar
コマンド行を短くしたり簡潔にするために、引数を個別のテキスト・ファイルに指定し、接頭辞としてアット記号(@
)を付けてjar
コマンドに渡すことができます。
jar --create --file my.jar @classes.list