名前
jar - クラスおよびリソースのアーカイブを作成し、アーカイブから個々のクラスまたはリソースを操作またはリストア
シノプシス
jar [OPTION ...] [ [--release VERSION] [-C dir] files] ...
説明
jarコマンドは、ZIPおよびZLIBの圧縮形式に基づいた汎用のアーカイブおよび圧縮ツールです。 jarコマンドは当初、Javaアプレット(JDK 11以降はサポート対象外)やアプリケーションをパッケージ化することを目的としていましたが、JDK 9以降は、モジュラJARの作成にjarコマンドを使用できます。 転送やデプロイの場合は通常、モジュールをモジュラJARとしてパッケージ化した方が便利です。 
jarコマンドの構文は、tarコマンドの構文と似ています。 必須の操作引数の1つによって定義されるいくつかの主な操作モードを持っています。 その他の引数は、操作の動作を変更するオプションか、操作を実行するために必要なオプションです。 
モジュールまたはアプリケーションのコンポーネント(ファイル、イメージおよびサウンド)が1つのアーカイブに結合されていると、Javaエージェント(ブラウザなど)は、それらのコンポーネントを1回のHTTPトランザクションでダウンロードすることができ、コンポーネントごとに新しい接続を必要とすることがありません。 これによって、ダウンロードの回数が大幅に減ります。 また、jarコマンドはファイルを圧縮するので、ダウンロード時間もさらに短くなります。 また、jarコマンドを使用すると、ファイル内の個々のエントリに署名を書き込めるので、配布元の認証が可能になります。 JARファイルは、圧縮されているかどうかにかかわらず、クラス・パスのエントリとして使用できます。 
特定のディレクトリのルートまたは.jarアーカイブのルートにモジュール・ディスクリプタmodule-info.classを含めると、アーカイブはモジュラJARになります。 次の操作(「作成および更新モードでのみ有効な操作修飾子」を参照)は、モジュラJARの作成または更新時、あるいは既存の非モジュラJARの更新時にのみ有効です。 
- --module-version
- --hash-modules
- --module-path
ノート:
ロング・オプションのすべての必須またはオプション引数は、対応するショート・オプションについても必須またはオプションです。
主な動作モード
jarコマンドを使用する際、実行する操作を指定する必要があります。 jarコマンドの操作モードを指定するには、この項で説明されている適切な操作引数を含めます。 操作引数を他の1文字オプションと混在させることができます。 一般にoperation引数は、コマンドラインで指定された最初の引数です。 
- -cまたは- --create
- アーカイブを作成します。
- -i=FILEまたは- --generate-index=FILE
- 指定されたJARファイルの索引情報を生成します。
- -tまたは- --list
- アーカイブの目次を一覧表示します。
- -uまたは- --update
- 既存のJARファイルを更新します。
- -xまたは- --extract
- 指定された(またはすべて)ファイルをアーカイブから抽出します。
- -dor- --describe-module
- モジュール・ディスクリプタまたは自動モジュール名を出力します。
任意のモードで有効な操作修飾子
次のオプションは、jarコマンドに含めた操作モードの動作をカスタマイズするのに使用できます。
- -CDIR
- 指定されたディレクトリを変更し、コマンド行の最後にfilesの指定を含めます。 - jar[OPTION ...] [ [- --releaseVERSION] [- -Cdir] files]
- -f=FILEまたは- --file=FILE
- アーカイブ・ファイル名を指定します。
- --releaseVERSION
- マルチリリースJARファイルを作成します。 オプションの後に指定したすべてのファイルを、 - META-INF/versions/VERSION- /という名前のJARファイルのバージョニングされたディレクトリに配置します。VERSIONは、値を9以上にする正の整数にする必要があります。- 実行時、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
- ハッシュを生成するためのモジュール依存のロケーションを指定します。
- @file
- テキスト・ファイルからjarオプションおよびファイル名を読み取ります。
作成、更新、および生成インデックス・モードでのみ有効な操作修飾子
次のオプションを使用して、更新(-uまたは--update)および世代索引(-iまたは--generate-index= FILE)のメイン操作モードの作成(-cまたは--create)のアクションをカスタマイズできます:
- -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/
- モジュール記述子が - classes/module-info.classにあるモジュラJARアーカイブ- foo.jarを作成します。- 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
- classesディレクトリ内のファイルをJARのルートに配置するバージョン管理されたJARまたは複数の要素JAR、- foo.jarを作成し、ファイルをJARの- META-INF/versions/10ディレクトリにある- classes-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