jar(1)

名前
jar - Java Archive (JAR)ファイルを操作します。

概要

JARファイルの作成

    jar c[efmMnv0] [entrypoint] [jarfile] [manifest] [-C dir] file ... [-Joption ...] [@arg-file ...]

JARファイルの更新

    jar u[efmMnv0] [entrypoint] [jarfile] [manifest] [-C dir] file ... [-Joption ...] [@arg-file ...]

JARファイルの抽出

    jar x[vf] [jarfile] file ... [-Joption ...] [@arg-file ...]

JARファイルのコンテンツのリスト

    jar t[vf] [jarfile] file ... [-Joption ...] [@arg-file ...]

JARファイルへの索引の追加

    jar i jarfile [-Joption ...] [@arg-file ...]

説明

jarコマンドは、ZIPおよびZLIB圧縮形式に基づく汎用のアーカイブおよび圧縮ツールです。ただし、jarコマンドは、主にいくつかのJavaアプレットやアプリケーションを単一のアーカイブにパッケージ化するように設計されました。アプレットやアプリケーションのコンポーネント(ファイル、イメージ、およびサウンド)が1つのアーカイブに結合されていると、Javaエージェント(ブラウザなど)は、それらのコンポーネントを1回のHTTPトランザクションでダウンロードすることができ、コンポーネントごとに新しい接続が不要になります。これにより、ダウンロード時間が大幅に短縮されます。また、jarコマンドはファイルの圧縮も行うため、ダウンロード時間がさらに短縮されます。また、jarコマンドによって、ファイル内の個々のエントリにアプレット作成者による署名を書き込めるため、配布元の認証が可能になります。JARファイルは、圧縮されているかどうかにかかわらず、クラス・パスのエントリとして使用できます。

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

操作の引数

jarコマンドを使用する場合は、次の操作の引数のいずれかを指定して実行される操作を選択する必要があります。コマンド行で他の1文字のオプションと混在させることができますが、通常、操作の引数は指定される最初の引数です。

c
    新しいJARアーカイブを作成します。

i
    JARアーカイブの索引情報を生成します。

t
    JARアーカイブのコンテンツをリストします。

u
    JARアーカイブを更新します。

x
    JARアーカイブからファイルを抽出します。

オプション

次のオプションを使用して、JARファイルを作成、更新、抽出または表示する方法をカスタマイズします。

e
    entrypointオペランドで指定されるクラスを、実行可能JARファイルにバンドルされるスタンドアロンJavaアプリケーションのエントリ・ポイントに設定します。このオプションを使用すると、マニフェスト・ファイル内のMain-Class属性値が作成またはオーバーライドされます。eオプションは、JARファイルの作成時(c)または更新時(u)に使用できます。

    たとえば、次のコマンドでは、Main.jarアーカイブがMain.classファイルとともに作成されますが、その際、マニフェスト内のMain-Class属性値はMainに設定されます。

        jar cfe Main.jar Main Main.class

    Java Runtime Environment (JRE)は、次のコマンドを実行して、このアプリケーションを直接呼び出すことができます。

        java -jar Main.jar

    あるパッケージ内にエントリ・ポイントのクラス名が含まれている場合、ドット(.)またはスラッシュ(/)のいずれかを区切り文字として使用できます。たとえば、Main.classがmydirという名前のパッケージに含まれている場合、エントリ・ポイントは次のいずれかの方法で指定できます。

        jar -cfe Main.jar mydir/Main mydir/Main.class
        jar -cfe Main.jar mydir.Main mydir/Main.class

        注記
        注意 特定のマニフェストにもMain-Class属性が含まれている場合にmオプションとeオプションの両方を同時に指定すると、Main-Classの指定があいまいになります。このあいまいさによってエラーが発生し、jarコマンドの作成や更新の操作が終了します。

f
    jarfileオペランドで指定されたファイルを、作成(c)、更新(u)、抽出(x)または表示(t)されるJARファイルの名前に設定します。fオプションおよびjarfileオペランドを省略すると、jarコマンドに、stdinからのJARファイル名を受け入れるか(xおよびtの場合)、JARファイルをstdoutに送信すること(cおよびuの場合)が指示されます。

m
    (META-INF/MANIFEST.MFのアーカイブにある) jarコマンドのマニフェスト・ファイルのmanifestオペランドで指定されたファイルから、属性の名前と値のペアを含めます。jarコマンドは、同じ名前のエントリがすでに存在する場合を除き、属性の名前と値をJARファイルに追加します。同じ名前のエントリがすでに存在する場合、jarコマンドは属性の値を更新します。mオプションは、JARファイルの作成時(c)または更新時(u)に使用できます。

    デフォルトのマニフェスト・ファイルには含まれないマニフェストに、特別な目的の名前-値の属性ペアを追加できます。たとえば、ベンダー情報、リリース情報、パッケージ・シーリングを指定する属性、またはJARにバンドルされたアプリケーションを実行可能にするための属性を追加できます。mオプションの使用例は、http://docs.oracle.com/javase/tutorial/deployment/jar/index.htmlにある プログラムのパッケージ化に関する項を参照してください。

M
    マニフェスト・ファイル・エントリを作成しない(cおよびuの場合)か、またはマニフェスト・ファイル・エントリが存在する場合は削除します(uの場合)。Mオプションは、JARファイルの作成時(c)または更新時(u)に使用できます。

n
    JARファイルの作成(c)時に、このオプションは、コンテンツがpack200(1)コマンドのパックおよびアンパック操作の影響を受けないようにアーカイブを正規化します。この正規化を使用しない場合、署名付きJARの署名は無効になります。

v
    詳細な出力を標準出力に生成します。例を参照してください。

0
    (ゼロ) ZIP圧縮を使用しないでJARファイルを作成(c)または更新(u)します。

-C dir
    JARファイルの作成(c)または更新(u)時に、このオプションはfileオペランドで指定されたファイルの処理中にディレクトリを一時的に変更します。この操作は、tarユーティリティの-Cオプションと同様になることを目的としています。たとえば、次のコマンドによって、classesディレクトリに変更され、そのディレクトリからmy.jarにBar.classファイルが追加されます。

        jar uf my.jar -C classes Bar.class

    次のコマンドでは、classesディレクトリに移動し、classesディレクトリ内のすべてのファイルをmy.jarに追加します(JARファイルにはclassesディレクトリを作成しません)。次に元のディレクトリに戻ってから、binディレクトリに移動し、Xyz.classをmy.jarに追加します。

        jar uf my.jar -C classes . -C bin Xyz.class

    classesにbar1ファイルとbar2ファイルが含まれている場合、前述のコマンドを実行した後、JARファイルには次のものが含まれます。

        % jar tf my.jar
        META-INF/
        META-INF/MANIFEST.MF
        bar1
        bar2
        Xyz.class

-Joption
    指定したJVMオプションを、JREがJARファイルを実行する際に使用するように設定します。JVMオプションは、java(1)コマンドのリファレンス・ページで説明されています。たとえば、-J-Xms48mと指定すると、スタートアップ・メモリーは48MBに設定されます。

オペランド

次のオペランドは、jarコマンドで認識されます。

file
    JARファイルの作成(c)または更新(u)時に、fileオペランドは、アーカイブに追加する必要のあるファイルまたはディレクトリのパスと名前を定義します。JARファイルの抽出(x)またはコンテンツのリスト(t)時に、fileオペランドは抽出またはリストするファイルのパスと名前を定義します。少なくとも1つの有効なファイルまたはディレクトリを指定する必要があります。複数のfileオペランドを空白で区切ります。entrypoint、jarfileまたはmanifestオペランドが使用される場合は、その後にfileオペランドを指定する必要があります。

entrypoint
    JARファイルの作成(c)または更新(u)時に、entrypointオペランドは、実行可能JARファイルにバンドルされているスタンドアロンJavaアプリケーションのエントリ・ポイントとなるクラスの名前を定義します。eオプションが存在する場合はentrypointオペランドを指定する必要があります。

jarfile
    作成(c)、更新(u)、抽出(x)または表示(t)するファイルの名前を定義します。fオプションが存在する場合はjarfileオペランドを指定する必要があります。fオプションおよびjarfileオペランドを省略すると、jarコマンドに、stdinからのJARファイル名を受け入れるか(xおよびtの場合)、JARファイルをstdoutに送信すること(cおよびuの場合)が指示されます。

    JARファイルを索引付け(i)する場合は、fオプションを指定しないでjarfileオペランドを指定します。

manifest
    JARファイルの作成(c)または更新(u)時に、manifestオペランドはJARファイルのMANIFEST.MFに含める属性の名前と値を持つ既存のマニフェスト・ファイルを定義します。fオプションが存在する場合はmanifestオペランドを指定する必要があります。

@arg-file
    jarコマンドを短縮または簡素化するには、別のテキスト・ファイル内の引数を指定し、接頭辞としてアットマーク(@)を付けてjarコマンドに渡すことができます。jarコマンドは、アットマーク文字で始まる引数を見つけると、そのファイルの内容を展開して引数リストに挿入します。

    引数ファイルには、jarコマンドのオプションと引数(引数ファイルをサポートしない起動ツールに渡される-Jオプションを除く)を含めることができます。ファイル内の引数は、空白または改行文字で区切ることができます。引数ファイル内のファイル名は、jarコマンドを実行できる現在のディレクトリに対して相対的であり、引数ファイルの場所に対しては相対的ではありません。通常はオペレーティング・システム・シェルによって展開されるアスタリスク(*)などのワイルドカードは展開されません。

    次の例は、findコマンドによる現在のディレクトリ出力からのファイル名でclasses.listファイルを作成する方法を示します。

        find . -name '*.class' -print > classes.list

    jarコマンドを実行し、@arg-file構文を使用してclasses.listファイルを渡すことができます。

        jar cf my.jar @classes.list

    引数ファイルはパスを指定できますが、相対パスが記述された引数ファイル内のすべてのファイル名は、渡されたパスに対して相対的ではなく、jarコマンドの現在の作業ディレクトリに相対的となります。たとえば、次のようになります。

        jar @dir/classes.list

注意

e、fおよびmオプションは、entrypoint、jarfileおよびmanifestオペランドと同じ順序でコマンド行に出現する必要があります。

    jar cmef myManifestFile MyMainClass myFile.jar *.class

例

例 1 冗長な出力による現在のディレクトリからのすべてのファイルの追加

        % ls
        1.au          Animator.class    monkey.jpg
        2.au          Wave.class        spacemusic.au
        3.au          at_work.gif

        % jar cvf bundle.jar *
        added manifest
        adding: 1.au(in = 2324) (out= 67)(deflated 97%)
        adding: 2.au(in = 6970) (out= 90)(deflated 98%)
        adding: 3.au(in = 11616) (out= 108)(deflated 99%)
        adding: Animator.class(in = 2266) (out= 66)(deflated 97%)
        adding: Wave.class(in = 3778) (out= 81)(deflated 97%)
        adding: at_work.gif(in = 6621) (out= 89)(deflated 98%)
        adding: monkey.jpg(in = 7667) (out= 91)(deflated 98%)
        adding: spacemusic.au(in = 3079) (out= 73)(deflated 97%)

例 2 サブディレクトリからのファイルの追加

        % ls -F
        audio/ classes/ images/
        % jar cvf bundle.jar audio classes images
        added manifest
        adding: audio/(in = 0) (out= 0)(stored 0%)
        adding: audio/1.au(in = 2324) (out= 67)(deflated 97%)
        adding: audio/2.au(in = 6970) (out= 90)(deflated 98%)
        adding: audio/3.au(in = 11616) (out= 108)(deflated 99%)
        adding: audio/spacemusic.au(in = 3079) (out= 73)(deflated 97%)
        adding: classes/(in = 0) (out= 0)(stored 0%)
        adding: classes/Animator.class(in = 2266) (out= 66)(deflated 97%)
        adding: classes/Wave.class(in = 3778) (out= 81)(deflated 97%)
        adding: images/(in = 0) (out= 0)(stored 0%)
        adding: images/monkey.jpg(in = 7667) (out= 91)(deflated 98%)
        adding: images/at_work.gif(in = 6621) (out= 89)(deflated 98%)

        % ls -F
        audio/ bundle.jar classes/ images/

例 3 JARのコンテンツのリスト

        % jar tf bundle.jar

        META-INF/
        META-INF/MANIFEST.MF
        audio/1.au
        audio/2.au
        audio/3.au
        audio/spacemusic.au
        classes/Animator.class
        classes/Wave.class
        images/monkey.jpg
        images/at_work.gif

例 4 索引の追加
    株式取引のアプリケーションの相互依存クラスを、main.jar、buy.jarおよびsell.jarの3つのJARファイルに分割する場合、iオプションを使用します。main.jarマニフェスト内のClass-Path属性を指定する場合、iオプションを使用して、アプリケーションのクラス・ロードの速度を向上できます。

        Class-Path: buy.jar sell.jar
        jar i main.jar

    INDEX.LISTファイルがMETA-INFディレクトリに挿入されます。これにより、アプリケーションのクラス・ローダーによってクラスまたはリソースの検索が行われるときに、指定したJARファイルがダウンロードされるようになります。

    アプリケーションのクラス・ローダーは、このファイルに格納されている情報を使用して、効率的にクラスをロードします。ディレクトリをコピーするには、最初にdir1内のファイルをstdoutに圧縮してから、stdinからdir2にパイプラインを作成して抽出します(-fオプションは両方のjarコマンドで省略します)。

        (cd dir1; jar c .) | (cd dir2; jar x)

関連項目

    • pack200(1).

    • http://docs.oracle.com/javase/tutorial/deployment/jar/index.htmlにある JavaチュートリアルのJARに関する項