名前
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ファイルは、圧縮されているかどうかにかかわらず、クラス・パスのエントリとして使用できます。
アーカイブは、モジュール記述子module-info.classを、指定されたディレクトリのルートまたは.jarアーカイブのルートに含めた場合、モジュラJARになります。 次の操作(「作成および更新モードでのみ有効な操作修飾子」を参照)は、モジュラJARの作成または更新時、あるいは既存の非モジュラJARの更新時にのみ有効です。
--module-version--hash-modules--module-path
ノート:
ロング・オプションのすべての必須またはオプション引数は、対応するショート・オプションについても必須またはオプションです。
主な動作モード
jarコマンドを使用する場合は、実行する操作を指定する必要があります。 jarコマンドの操作モードを指定するには、この項で説明する適切な操作引数を含めます。 操作引数を他の1文字オプションと混在させることができます。 一般にoperation引数は、コマンドラインで指定された最初の引数です。
-cまたは--create- アーカイブを作成します。
-iFILEまたは--generate-index=FILE- 指定されたJARファイルの索引情報を生成します。 このオプションは非推奨であり、将来のリリースで削除される可能性があります。
-tまたは--list- アーカイブの目次を一覧表示します。
-uまたは--update- 既存のJARファイルを更新します。
-xまたは--extract- 指定された(またはすべて)ファイルをアーカイブから抽出します。
-dまたは--describe-module- モジュール・ディスクリプタまたは自動モジュール名を出力します。
任意のモードで有効な操作修飾子
次のオプションを使用して、jarコマンドに含まれる操作モードのアクションをカスタマイズできます。
-CDIR-
指定されたディレクトリを変更し、コマンド行の最後に指定されたファイルを格納します。
jar[OPTION ...] [ [--releaseVERSION] [-Cdir] files] -fFILEまたは--file=FILE- アーカイブ・ファイル名を指定します。
--releaseVERSION-
マルチリリースJARファイルを作成します。 オプションの後に指定したすべてのファイルを、
META-INF/versions/VERSION/という名前のJARファイルのバージョニングされたディレクトリに配置します。VERSIONは、値を9以上にする正の整数にする必要があります。実行時に、JARに複数のバージョンのクラスが存在する場合、JDKは最初に検出したバージョンを使用し、最初にVERSION番号がJDKのメジャー・バージョン番号と一致するディレクトリ・ツリーで検索します。 次に、連続して小さいVERSION番号を持つディレクトリを検索し、最後にJARのルートを調べます。
-vまたは--verbose- 冗長出力を標準出力に送信または出力します。
作成モードと更新モードでのみ有効な操作修飾子
次のオプションを使用して、作成および更新メイン操作モードのアクションをカスタマイズできます:
-eCLASSNAMEまたは--main-class=CLASSNAME- モジュラJARファイルまたは実行可能なモジュラJARファイルにバンドルされたスタンドアロン・アプリケーションのアプリケーション・エントリ・ポイントを指定します。
-mFILEまたは--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による圧縮を使用せずに、保存します。
--date=TIMESTAMP- エントリのタイムスタンプに使用する、オプションのタイムゾーン形式のISO-8601拡張オフセット日時。例、"2022-02-12T12:30:00-05:00"。
その他のオプション
次のオプションは、jarコマンドで認識され、操作モードでは使用されません:
-hまたは--help[:compat]-
jarコマンドのコマンドライン・ヘルプ、またはオプションで互換性ヘルプを表示します。 --help-extra- 余分なオプションについてのヘルプを表示します。
--version- プログラムのバージョンを印刷します。
jarコマンド構文の例
Foo.classおよびBar.classという2つのクラス・ファイルを含むアーカイブclasses.jarを作成します。jar --create --file classes.jar Foo.class Bar.class最終変更日時を
2021 Jan 6 12:36:00に設定するFoo.classおよびBar.classという2つのクラス・ファイルを含むアーカイブclasses.jarを作成します。jar --create --date="2021-01-06T14:36:00+02:00" --file=classes.jar Foo.class Bar.classfoo/ディレクトリ内のすべてのファイルを含む既存のマニフェストmymanifestを使用して、アーカイブclasses.jarを作成します。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.classclassesディレクトリ内のファイルをJARのルートに配置するバージョン管理されたJARまたは複数の要素JAR、foo.jarを作成し、ファイルをJARのMETA-INF/versions/10ディレクトリにあるclasses-10ディレクトリに配置します。この例では、
classes/com/fooディレクトリには、JDK 8用にコンパイルされたcom.foo.Hello(エントリ・ポイント・クラス)およびcom.foo.NameProviderという2つのクラスが含まれています。classes-10/com/fooディレクトリには、JDK 10固有のコードを含み、JDK 10用にコンパイルされた、異なるバージョンのcom.foo.NameProviderクラスが含まれています。この設定では、ディレクトリ
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: truecom.foo.Helloクラスがcom.foo.NameProviderクラスでメソッドをコールする場合、JDK 10を使用してプログラムを実行すると、com.foo.NameProviderクラスがMETA-INF/versions/10/com/foo/内のメソッドであることが保証されます。 JDK 8を使用してプログラムを実行すると、com.foo.NameProviderクラスがcom/fooのJARのルートにあるクラスであることが保証されます。classes.listファイルからオプションおよびクラス・ファイルのリストを読み取って、アーカイブmy.jarを作成します。ノート:
jarコマンドを短縮または簡略化するために、JARファイルに含めるファイルをリストするargファイルを指定し、プレフィクスとしてアットマーク(@)を使用してjarコマンドに渡すことができます。jar --create --file my.jar @classes.listargファイル内の1つ以上のエントリが見つからない場合、JARファイルを作成せずにJARコマンドが失敗します。