jar(1)

名前
jar - Java アーカイブツール

形式
jar [ -C ] [ c ] [ f ] [ i ] [ M ] [ m ] [ O ] [ t ] [ u ] [ v ] [ x file ] [ manifest-file ] destination input-file [ input-files ]

機能説明
jar は Java アプリケーションの 1 つで、複数個のファイルを 1 個の JAR アーカイブファイルに統合します。また、 jar は汎用的なアーカイブ作成用および圧縮用のツールでもあり、 圧縮は ZIP または ZLIB 形式で行います。ただし jar ツールの主な目的は、いくつかの Java アプレットやアプリケーションを 1 個のアーカイブに統合して簡略化することです。 アプレットやアプリケーションのコンポーネント、たとえば クラスファイル、イメージ、サウンドなどを単一のアーカイブに まとめると、ブラウザのような Java エージェントにダウンロードするときに、一度の HTTP トランザクションで済みます。コンポーネントごとに 新たに接続する必要がありません。 これによりダウンロード時間が大幅に短縮できます。 また jar はファイルの圧縮も行うので、ダウンロードがより高速になります。 さらに、ファイル中の個々のエントリに対してアプレットの作成者が 署名できるので、作成元を明確化できます。 jar ツールの構文は、 tar(1) コマンドの構文とほぼ同一です。 jar アーカイブは、圧縮されているかどうかにかかわらず、 クラスパスエントリとして使用できます。

jar を使用する場合は、以下に示す 3 種類のファイルを入力します。

    •   manifest ファイル (任意指定)

    •   出力先 jar ファイル

    •   アーカイブされるファイル群

標準的な使い方は次のとおりです。

    example% jar cf myjarfile *.class

この例では、現在のディレクトリ中のすべてのクラスファイルが myjarfile という名前のファイルに置かれます。 manifest ファイルは jar ツールが自動的に生成し、常に jar ファイルの先頭のエントリとなります。 デフォルトでは manifest ファイルの名前は META-INF/MANIFEST.INF になります。 manifest ファイルには、アーカイブに関するすべてのメタ情報が 記録されます。 どのように記録されるかについては、「関連項目」の「 マニフェストフォーマット 」を参照してください。

既存の manifest ファイルを使って新たな jar アーカイブを作成したいときは、 -m オプションを使ってその manifest ファイルを指定します。以下に例を示します。

    example% jar cmf myManifestFile myJarFile *.class

cmf ではなく cfm を指定する場合 (つまり、 m オプションと f オプションの順番を逆にする場合)、最初に jar アーカイブ名を指定し、次に manifest ファイル名を指定する 必要があります。

    example% jar cfm myJarFile myManifestFile *.class

manifest は RFC822 ASCII 形式を使用するため、manifest ファイルの内容は 簡単に表示および処理できます。

オプション
次のオプションをサポートします。

-C  jar コマンドの実行中にディレクトリを変更します。次に例を示します。

    example% jar uf foo.jar -C classes *

c   標準出力上に新規のアーカイブまたは空のアーカイブを作成します。

f   2 つ目の引数が、処理される jar ファイルであることを指定します。作成 -c オプションで作成を行う場合には、 2 つ目の引数は作成する jar ファイルの名前 (標準出力の代わりに使用) を表します。 -t オプションで内容の一覧表示、または -x オプションで抽出を行う場合には、 2 つ目の引数はその対象となる jar ファイルの名前を表します。

i   指定された jar ファイルおよび関連付けられている jar ファイルのインデックス情報を生成します。次に例を示します。

    example% jar i foo.jar

foo.jar に INDEX.LIST ファイルが生成されます。 このファイルには、 foo.jar の各パッケージおよび foo.jar の Class-Path 属性に指定されているすべての jar ファイルの位置情報が書き込まれています。

M   当該エントリにマニフェストファイルを生成しません。

m   指定した既存のマニフェストファイルからマニフェスト情報を インクルードします。 次に例を示します。

    example% jar cmf myManifestFile myJarFile *.class

    マニフェストファイルには、デフォルトのマニフェストに含まれていない、 専用の「名前-値」属性ヘッダを追加できます。このようなヘッダの 例としては、ベンダ情報、バージョン情報、パッケージシーリング、 および JAR に含まれるアプリケーションを実行するためのヘッダが あります。 m オプションの使用例については、「Java Tutorial」の「JAR Files」節と 「JRE 開発者向けノート」Web ページを参照してください。

O   ZIP 圧縮を使用せずに格納します。

t   標準入力の内容の一覧を表示します。

u   ファイルを追加するか、マニフェストを変更することによって、 既存の JAR ファイルを更新します。次に例を示します。

    example% jar uf foo.jar foo.class

    この例は、ファイル foo.class を既存の JAR ファイル foo.jar に追加します。

    example% jar umf foo.jar

    この例は、 foo.jar のマニフェストをマニフェストの情報で更新します。

v   標準エラー出力に、詳細情報を出力します。

x file
    標準入力からファイルを抽出します。 file 引数は、抽出するファイルを指定します。 引数を省略すると、 すべてのファイルが抽出されます。

    引数に指定したファイルのどれかがディレクトリの場合、 そのディレクトリは再帰的に処理されます。

使用例
あるディレクトリ中のファイルをすべてアーカイブに追加する例を示します。
    example% ls
    0.au         3.au         6.au          9.au            at_work.gif
    1.au         4.au         7.au          Animator.class  monkey.jpg
    e.au         5.au         8.au          Wave.class      spacemusic.au
    example% jar cvf bundle.jar *
    adding: 0.au
    adding: 1.au
    adding: 2.au
    adding: 3.au
    adding: 4.au
    adding: 5.au
    adding: 6.au
    adding: 7.au
    adding: 8.au
    adding: 9.au
    adding: Animator.class
    adding: Wave.class
    adding: at_work.gif
    adding: monkey.jpg
    adding: spacemusic.au
    example%

イメージ、オーディオファイル、およびクラス用のサブディレクトリが すでに HTML ディレクトリ中に存在している場合、 jar を使って個々のサブディレクトリを単一の jar ファイルにアーカイブできます。
    example% ls
    audio classes images
    example% jar cvf bundle.jar audio classes images
    adding: audio/1.au
    adding: audio/2.au
    adding: audio/3.au
    adding: audio/spacemusic.au
    adding: classes/Animator.class
    adding: classes/Wave.class
    adding: images/monkey.jpg
    adding: images/at_work.gif
    example% ls -l
    total 142
    drwxr-xr-x   2 brown    green        512 Aug  1 22:33 audio
    -rw-r--r--   1 brown    green      68677 Aug  1 22:36 bundle.jar
    drwxr-xr-x   2 brown    green        512 Aug  1 22:26 classes
    drwxr-xr-x   2 brown    green        512 Aug  1 22:25 images
    example%
次の例では、 jar ツールに t オプションを指定して jar ファイル中のエントリ名を表示できます。
    example% ls
    audio bundle.jar classes images
    example% jar tf bundle.jar
    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
    example%
アーカイブ中の各ファイルの詳細情報、たとえばサイズや 最新更新日付なども表示したい場合は、 v オプションを使用します。次に例を示します。
    example% jar tvf bundle.jar
    145 Thu Aug 01 22:27:00 PDT 1996 META-INF/MANIFEST.MF
    946 Thu Aug 01 22:24:22 PDT 1996 audio/1.au
    1039 Thu Aug 01 22:24:22 PDT 1996 audio/2.au
    993 Thu Aug 01 22:24:22 PDT 1996 audio/3.au
    48072 Thu Aug 01 22:24:23 PDT 1996 audio/spacemusic.au
    16711 Thu Aug 01 22:25:50 PDT 1996 classes/Animator.class
    3368 Thu Aug 01 22:26:02 PDT 1996 classes/Wave.class
    12809 Thu Aug 01 22:24:48 PDT 1996 images/monkey.jpg
    527 Thu Aug 01 22:25:20 PDT 1996 images/at_work.gif
    example%

株取引アプリケーション (アプレット) を次の複数の jar ファイルにバンドルし、

    main.jar buy.jar sell.jar other.jar

main.jar のマニフェストの Class-Path 属性に次のように指定した場合、

    Class-Path: buy.jar sell.jar other.jar

i オプションを使用すれば、アプリケーションのクラスの ロードを高速化できます。

    example$ jar i main.jar

INDEX.LIST ファイルが META-INF ディレクトリに追加されます。 この結果、アプリケーションのクラスローダ によってクラスまたはリソースの検索が行われるときに、適切な jar ファイルがダウンロードされます。

関連項目
keytool(1)

JAR Files @
    http://java.sun.com/docs/books/tutorial/jar/

JRE 開発者向けノート @
    http://java.sun.com/j2se/1.3/ja/runtime.html#example (http://java.sun.com/j2se/1.3/runtime.html#example ：英語版)

JAR ガイド @
    http://java.sun.com/j2se/1.3/ja/docs/ja/guide/jar/index.html (http://java.sun.com/j2se/1.3/docs/guide/jar/index.html ：英語版)

関連項目の詳細は、以下の URL 中のサーチリンクを使用して参照してください。
    http://java.sun.com/