複数のファイルを 1 つの Java ARchive (JAR) ファイルに統合します。形式
jar [ options ] [manifest] destination input-file [input-files]解説
jar ツールは、複数のファイルを 1 つの JAR アーカイブファイルに統合するjava アプリケーションです。 jar は、ZIP および ZLIB 圧縮形式の、汎用のアーカイブおよび圧縮ツールです。 jar は、主として Java アプレットやアプリケーションを 1 つのアーカイブにパッケージ化するのを容易にするために考案されました。Java アプレットやアプリケーション (.class ファイル、イメージおよびサウンド) のコンポーネントが 1 つのアーカイブに結合されているとき、Java エージェント (ブラウザなど) による 1 回の HTTP 処理だけでダウンロードできるので、各ファイルごとに新しく接続する必要はありません。ダウンドード回数の面で大幅に向上しています。また jar はファイルを圧縮し、さらにダウンロード時間を短くします。作成元の認証を可能にするため、アプレット作成者による署名を、ファイルの個々のエントリに書き込むことができます。jar ツールの構文は、tar
コマンドの構文とほぼ同じです。jar アーカイブは、圧縮状態にかかわらず、クラスパスのエントリとして使用できます。jar ツールの入力ファイルには、次の 3 種類があります。
- マニフェストファイル (オプション)
- 出力先 jar ファイル
- アーカイブするファイル
標準的な使い方は次のとおりです。
% jar cf myjarfile *.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 の指定を省略した場合、すべてのファイルが展開されます。 指定した場合は、指定のファイルだけを展開します。
f
- 2 番目の引数で、処理される jar ファイルを指定します。
c
は、(標準出力の代わりに) 作成される jar ファイルの名前を示します。t
は一覧表示される jar ファイル、x
は展開される jar ファイルを示します。
v
- 標準エラー出力に詳細を出力します。
m
- 指定した既存のマニフェストファイルからマニフェスト情報を取り込みます。たとえば、次のようにして使います。
デフォルトのマニフェストに指定されていないマニフェストファイルに、特殊目的の名前と値の属性ヘッダを追加できます。このヘッダには、ベンダー情報、バージョン情報、パッケージシーリングなどを指定できるほか、Jar がバンドルされたアプリケーションを実行可能にするヘッダを指定することもできます。m オプションの使用例は、Java チュートリアルの「Jar Files」と Runtime Environment の開発者向けノートの Web ページを参照してください。jar cmf myManifestFile myJarFile *.class
0
- ZIP による圧縮を使用せずに保存だけを行います。
M
- エントリに使用するマニフェストファイルを作成しません。
u
- ファイルを追加するかマニフェストを変更して、既存の JAR ファイルを更新します。次に例を示します。
ファイル foo.class を既存の JAR ファイル foo.jar に追加します。jar uf foo.jar foo.classfoo.jar のマニフェストをマニフェスト情報で更新します。jar umf manifest foo.jar- i
- 指定された jar ファイルおよび関連付けられている jar ファイルのインデックス情報を生成します。次に例を示します。
jar -i foo.jarfoo.jar に INDEX.LIST ファイルが生成されます。 このファイルには、foo.jar および foo.jar の Class-Path 属性に指定されているすべての jar ファイルの、各パッケージの位置情報が書き込まれています。
-C
- 次の引数を処理しながら、jar コマンドの実行中に、一時的にディレクトリを変更します。次に例を示します。
上記コマンド行は、classes ディレクトリに変更して、そのディレクトリの bar.class を foo.jar に追加します。jar uf foo.jar -C classes bar.class上記コマン行は、classes ディレクトリに変更して、classes ディレクトリ内のすべてのファイル (ただし、クラスディレクトリ自体は含まない) を foo.jar に追加します。さらに、bin ディレクトリに変更して、xyz.class を foo.jar に追加します。jar uf foo.jar -C classes .-C bin xyz.class特定のディレクトリのファイルをすべて、アーカイブに追加する場合:
C:\WWWROOT\JAVA> ls 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.tar 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.jarmain.jar のマニフェストの Class-Path 属性に次のように指定した場合、Class-Path:buy.jar sell.jar other.jar-i オプションを使用すれば、アプリケーションのクラスのロードを高速化できます。$ jar -i main.jarINDEX.LIST ファイルが META-INF ディレクトリに追加されます。 この結果、アプリケーションのクラスローダによってクラスまたはリソースの検索が行われるときに、適切な jar ファイルがダウンロードされます。関連項目
Jar ファイルの概要
Jar ファイルの仕様
Jar インデックス
Java チュートリアル (Java ソフトウェアの Web サイトにあります)