jar - Java ARchive ツール

複数のファイルを 1 つの Java ARchive (JAR) ファイルに結合します。

形式


jar [ options ] [manifest] destination input-file [input-files]

説明

jar ツールは、複数のファイルを 1 つの JAR アーカイブファイルに結合する java アプリケーションです。jar は、ZIP および ZLIB 圧縮形式をベースにした、汎用のアーカイブおよび圧縮ツールです。 jar は、主に Java のアプレットやアプリケーションを 1 つのアーカイブにパッケージ化するのを容易にするために考案されました。 アプレットやアプリケーションのコンポーネント (.class ファイル、イメージ、およびサウンド) が 1 つのアーカイブに結合されていると、Java エージェント (ブラウザなど) は、それらのコンポーネントを 1 回の HTTP トランザクションでダウンロードすることができ、コンポーネントごとに新しい接続を必要とすることがありません。 これによって、ダウンロードの回数が大幅に減ります。また、jar はファイルを圧縮するので、ダウンロード時間も短くなります。 また、ファイル内の個々のエントリにアプレット作成者による署名を書き込めるので、配布元の認証が可能になります。 jar ツールの構文は、tar コマンドの構文とほぼ同じです。 JAR アーカイブは、圧縮されているかどうかにかかわらず、クラスパスのエントリとして使用できます。

jar ツールの入力パラメータとして指定するファイルには、次の 3 種類があります。

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

	% jar cf myjarfile *.class
この例では、現在のディレクトリにあるクラス (.class) ファイルがすべて、myjarfile という名前のファイルに格納されます。 マニフェストファイルは、jar ツールによって自動的に生成され、常に JAR ファイル内の先頭に置かれます。 デフォルトでは、マニフェストファイルの名前は META-INF/MANIFEST.MF です。 マニフェストファイルには、アーカイブのメタ情報も格納されます。 マニフェストファイルにメタ情報がどのようにして格納されるかについての詳細は、「JAR ファイルの仕様」を参照してください。

JAR アーカイブを作成するために jar ツールで使用したい既存のマニフェストファイルがある場合は、次のように、m オプションを使用してマニフェストファイルを指定できます。

	% jar cmf myManifestFile myJarFile *.class

使用する既存のマニフェストファイルが、改行文字で終わっていることを確認してください。 マニフェストファイルの末尾が改行文字でない場合、ファイルの最後の行は構文解析されません。 「cmf」ではなく「cfm」と指定したとき (「m」オプションと「f」オプションを逆に指定したとき) は、JAR アーカイブの名前のあとに、マニフェストファイルの名前を指定する必要があります。

	% jar cfm myJarFile myManifestFile *.class

マニフェストファイルでは RFC822 の ASCII 形式を使用しているため、内容の表示や処理が容易です。

Java 2 SDK のバージョン 1.3 以降から、jar ユーティリティで JarIndex がサポートされています。JarIndex を使用すると、アプリケーションのクラスローダで JAR ファイルからクラスがロードされるときの効率が向上します。 アプリケーションまたはアプレットが複数の JAR ファイルにバンドルされている場合は、クラスがロードされるときに、必要な JAR ファイル以外のダウンロードおよびオープンは行われません。 このパフォーマンスの最適化は、新しい -i オプションを指定して jar を実行すると有効になります。 このオプションを使うと、指定した JAR メインファイルと、そのメインファイルが依存しているすべての JAR ファイルについて、パッケージ位置情報が生成されます。メインファイルが依存している JAR ファイルは、JAR メインファイルのマニフェストの Class-Path 属性に指定しておく必要があります。

% jar -i main.jar

上の例では、INDEX.LIST ファイルが、main.jar のマニフェストの META-INF ディレクトリに挿入されます。
アプリケーションのクラスローダは、このファイルに格納されている情報を使用して、効率的にクラスをロードします。インデックスファイルに位置情報が格納される方法の詳細は、JarIndex の仕様を参照してください。

jar ツールを使用して JAR ファイルとそのマニフェストを操作する例は、このあとの「例」と、「Java チュートリアル」の「Jar」を参照してください。

オプション

文字 @ で始まる引数を使用すると、追加の引数の入ったファイルを指定できます。このファイルでは、1 行に引数を 1 つずつ記述します。 これらの引数は、コマンド行の @<filename> 引数の位置に挿入されます。

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

t
標準出力からの内容を表形式で一覧表示します。

x file
すべてのファイル、または指定されたファイルだけを、標準入力から展開します。 file を指定しない場合は、すべてのファイルが展開されます。指定した場合は、指定のファイル (1 つまたは複数) だけが展開されます。

f
2 番目の引数として、処理対象の JAR ファイルを指定します。 c とともに指定すると、2 番目の引数は、標準出力ではなく、作成される JAR ファイルの名前を示します。 また、t とともに指定すると、内容を一覧表示する JAR ファイルを示し、x とともに指定すると、展開する JAR ファイルを示します。

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

m
指定された既存のマニフェストファイルからマニフェスト情報を取り込みます。 たとえば、次のようにして使います。
jar cmf myManifestFile myJarFile *.class
デフォルトのマニフェストには含まれない、特別な目的の属性ヘッダ (名前と値で構成される) を追加できます。 このヘッダには、ベンダー情報、バージョン情報、パッケージのシールなどを記述できるほか、JAR にバンドルされたアプリケーションを実行可能にするヘッダを記述することもできます。 m オプションの使用例は、Java チュートリアルの「Trail: Jar Files」と、Java Runtime Environment の「開発者向けノート」の Web ページを参照してください。

0
ZIP による圧縮を使用しないで、保存だけを行います。

M
エントリのためのマニフェストファイルを作成しません。

u
ファイルを追加するかマニフェストを変更して、既存の JAR ファイルを更新します。 例を示します。
jar uf foo.jar foo.class
上のコマンドは、ファイル foo.class を既存の JAR ファイル foo.jar に追加します。
jar umf manifest foo.jar
上のコマンドは、foo.jar のマニフェストを manifest 内の情報で更新します。
i
指定された JAR ファイルと、それに依存する JAR ファイルについて、インデックス情報を生成します。 例を示します。
jar -i foo.jar

上のコマンドは、foo.jar 内に INDEX.LIST ファイルを生成します。このファイルには、foo.jar と、foo.jarClass-Path 属性に指定されたすべての JAR ファイルに入っている各パッケージの位置情報が書き込まれています。

-C
jar コマンドを実行して次の引数を処理する間、一時的にディレクトリを変更します。 例を示します。
jar uf foo.jar -C classes bar.class
上のコマンドは、classes ディレクトリに移って、そのディレクトリから bar.classfoo.jar に追加します。 次に別の例を示します。
jar uf foo.jar -C classes . -C bin xyz.class
このコマンドは、まず classes ディレクトリに移って、classes ディレクトリ内のすべてのファイル (ただし、classes ディレクトリ自体は除く) を foo.jar に追加します。次に、bin ディレクトリに移って、xyz.classfoo.jar に追加します。
-Joption
Java 仮想マシンに option を渡します。option には、「Java アプリケーション起動ツール」のリファレンスページに記載されているオプションを 1 つ指定します。 たとえば、-J-Xms48m と指定すると、スタートアップメモリは 48M バイトに設定されます。
指定した「ファイル」の中にディレクトリが含まれる場合は、そのディレクトリが再帰的に処理されます。

特定のディレクトリ内のすべてのファイルをアーカイブに追加する (そのアーカイブが既に存在する場合は、その内容を上書きする) には、次のようにします。

C:¥WWWROOT¥JAVA> DIR
12/09/96  12:20a        <DIR>          .    
12/09/96  12:17a        <DIR>          ..  
12/09/96  12:18a                 1,010 0.au
12/09/96  12:18a                   946 1.au
12/09/96  12:18a                 1,039 2.au
12/09/96  12:18a                   993 3.au
12/09/96  12:18a                 1,006 4.au
12/09/96  12:18a                 1,016 5.au
12/09/96  12:18a                 1,048 6.au
12/09/96  12:18a                   980 7.au
12/09/96  12:18a                 1,064 8.au
12/09/96  12:18a                   989 9.au  
12/09/96  12:19a                48,072 spacemusic.au
12/09/96  12:19a                   527 at_work.gif
12/09/96  12:19a                12,818 monkey.jpg
12/09/96  12:19a                16,242 Animator.class
12/09/96  12:20a                 3,368 Wave.class
              17 File(s)         91,118 bytes
                            414,983,168 bytes free

C:¥WWWROOT¥JAVA> 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
C:¥WWWROOT¥JAVA>
html ディレクトリの中に、イメージ、オーディオファイル、およびクラス用のサブディレクトリがすでにある場合は、次のコマンドによって、各ディレクトリを 1 つの JAR ファイルに格納できます。
C:¥WWWROOT¥JAVA> DIR
12/09/96  12:11a        <DIR>          .
12/09/96  12:17a        <DIR>          ..
12/03/96  06:54p        <DIR>          audio
12/06/96  02:02p        <DIR>          images
12/09/96  12:10a        <DIR>          classes
               6 File(s)        207,360 bytes
                            414,983,168 bytes free

C:¥WWWROOT¥JAVA> 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
C:¥WWWROOT¥JAVA¥Animator> dir
12/09/96  12:11a        <DIR>          .
12/09/96  12:17a        <DIR>          ..
12/09/96  12:11a               207,360 bundle.jar
12/03/96  06:54p        <DIR>          audio
12/06/96  02:02p        <DIR>          images
12/09/96  12:10a        <DIR>          classes
               6 File(s)        207,360 bytes
                            414,983,168 bytes free

C:¥WWWROOT¥JAVA¥Animator> 
次のように、jar ツールに t オプションを指定すると、JAR ファイル内のエントリ名を表示できます。
C:¥WWWROOT¥JAVA¥Animator> 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
C:¥WWWROOT¥JAVA¥Animator> 
v オプションを使用して情報を詳細に列挙するように指定すると、サイズや最新の更新日など、アーカイブ内のファイルについての詳細情報が表示されます。
C:¥WWWROOT¥JAVA¥Animator> 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
C:¥WWWROOT¥JAVA¥Animator>

株取引アプリケーション (アプレット) を次の jar ファイルにバンドルした場合は、次の情報が出力されます。

main.jar buy.jar sell.jar other.jar
main.jar のマニフェストで Class-Path 属性に次のように指定したとします。
Class-Path: buy.jar sell.jar other.jar
次のように -i オプションを使用すると、アプリケーションのクラスのロードを高速化できます。
$ jar -i main.jar
この場合、INDEX.LIST ファイルが META-INF ディレクトリに追加されます。これにより、アプリケーションのクラスローダがクラスまたはリソースを検索する際に、適切な JAR ファイルをダウンロードできるようになります。

関連項目

「JAR ファイルの概要」
「JAR ファイルの仕様」
「JAR インデックス」
「Java チュートリアル」 (Java ソフトウェアの Web サイト内)

Copyright © 2002 Sun Microsystems, Inc. All Rights Reserved.

Sun
Java ソフトウェア