jar

jarコマンドは、クラスおよびリソースのアーカイブを作成したり、個々のクラスまたはリソースをアーカイブから操作または復元する場合に使用できます。

形式

jar [OPTION...] [ [--release VERSION] [-C dir] files] ...

説明

jarコマンドは、ZIPおよびZLIBの圧縮形式に基づいた汎用のアーカイブおよび圧縮ツールです。jarコマンドは当初、Javaアプレット(JDK 11以降はサポート対象外)やアプリケーションをパッケージ化することを目的としていましたが、JDK 9以降は、モジュラJARの作成にjarコマンドを使用できます。転送やデプロイの場合は通常、モジュールをモジュラJARとしてパッケージ化した方が便利です。

jarコマンドの構文は、tarコマンドの構文と似ています。必須の操作引数のいずれかで定義された複数の主要な操作モードがあります。その他の引数は、操作の動作を変更するオプションと、操作を実行するために必要なオペランドのいずれかです。

モジュールまたはアプリケーションのコンポーネント(ファイル、イメージおよびサウンド)が1つのアーカイブに結合されていると、Javaエージェント(ブラウザなど)は、それらのコンポーネントを1回のHTTPトランザクションでダウンロードすることができ、コンポーネントごとに新しい接続を必要とすることがありません。これによって、ダウンロードの回数が大幅に減ります。また、jarコマンドはファイルを圧縮するので、ダウンロード時間もさらに短くなります。また、jarコマンドを使用すると、ファイル内の個々のエントリに署名を書き込めるので、配布元の認証が可能になります。JARファイルは、圧縮されているかどうかにかかわらず、クラス・パスのエントリとして使用できます。

特定のディレクトリのルートまたはJARアーカイブのルートにモジュール・ディスクリプタmodule-info.classを含めると、アーカイブはモジュラJARになります。次の操作(「作成および更新モードでのみ有効な操作修飾子」を参照)は、モジュラJARの作成または更新時、あるいは既存の非モジュラJARの更新時にのみ有効です。

  • --module-version

  • --hash-modules

  • --module-path

ノート:

長形式のオプションの必須引数またはオプション引数はすべて、対応する短形式のオプションに対しても必須またはオプションです。

主要な操作モード

jarコマンドを使用する際、実行する操作を指定する必要があります。jarコマンドの操作モードを指定するには、この項で説明されている適切な操作引数を含めます。操作引数と他の1文字オプションを同時に使用できます。一般に、操作引数はコマンド行に指定する最初の引数です。

-cまたは--create

アーカイブを作成します。

-i=FILEまたは--generate-index=FILE

指定されたJARファイルの索引情報を生成します。

-tまたは--list

アーカイブの目次をリストします。

-uまたは--update

既存のJARファイルを更新します。

-xまたは--extract

アーカイブから指定(または全部)のファイルを抽出します。

-d or --describe-module

モジュール・ディスクリプタまたは自動モジュール名を出力します。

任意のモードで有効な操作修飾子

次のオプションは、jarコマンドに含めた操作モードの動作をカスタマイズするのに使用できます。

-C DIR

指定されたディレクトリを変更し、コマンド行の最後にfilesの指定を含めます。

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 pathまたは--module-path path

ハッシュを生成するためのモジュール依存性の場所を指定します。

@file

テキスト・ファイルからjarオプションおよびファイル名を読み取ります。

作成、更新および索引生成モードでのみ有効な操作修飾子

次のオプションは、作成(-cまたは--create)、更新(-uまたは--update)および索引生成(-iまたは--generate-index=FILE)の主要操作モードの動作をカスタマイズするのに使用できます。

-0または--no-compress

ZIPによる圧縮を使用せずに、保存します。

その他のオプション

次のオプションは、jarコマンドで認識されますが、操作モードでは使用されません。

-hまたは--help[:compat]

jarコマンドのコマンド行ヘルプまたはオプションで互換性ヘルプを表示します。

--help-extra

追加オプションのヘルプを表示します。

--version

プログラム・バージョンを出力します。

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/
モジュラJARアーカイブfoo.jarを作成します。モジュール・ディスクリプタはclasses/module-info.classにあります。
 jar --create --file foo.jar --main-class com.foo.Main --module-version 1.0 -C foo/classes resources
既存の非モジュラJAR foo.jarをモジュラJARファイルに更新します。
 jar --update --file foo.jar --main-class com.foo.Main --module-version 1.0 -C foo/module-info.class
バージョニングされたJARまたはマルチリリースJAR foo.jarを作成し、classesディレクトリ内のファイルをJARのルートに、classes-10ディレクトリのファイルをJARのMETA-INF/versions/10ディレクトリに格納します。

この例では、classes/com/fooディレクトリに2つのクラスcom.foo.Hello (エントリ・ポイント・クラス)およびcom.foo.NameProviderがあり、いずれもJDK 8用にコンパイルされています。classes-10/com/fooディレクトリには異なるバージョンのcom.foo.NameProviderクラスがあり、これはJDK 10固有のコードを含み、JDK 10用にコンパイルされています。

このセットアップの場合、ディレクトリclassesおよびclasses-10が格納されているディレクトリから次のコマンドを実行して、マルチリリースJARファイルfoo.jarを作成します。

jar --create --file foo.jar --main-class com.foo.Hello -C classes . --release 10 -C classes-10 .

この時点で、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/10/com/ 
META-INF/versions/10/com/foo/ 
META-INF/versions/10/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 10を使用しているプログラムを実行すると、必ずcom.foo.NameProviderクラスはMETA-INF/versions/10/com/foo/内にあります。JDK 8を使用しているプログラムを実行すると、必ずcom.foo.NameProviderクラスはJARのルート、com/foo内にあります。

オプションおよびクラス・ファイルのリストをファイルclasses.listから読み取って、アーカイブmy.jarを作成します。

ノート:

jarコマンド行を短くしたり簡潔にするために、引数を個別のテキスト・ファイルに指定し、接頭辞としてアット記号(@)を付けてjarコマンドに渡すことができます。

jar --create --file my.jar @classes.list