- JAR ファイルの作成
jar c[v0M]f
jarfile[-C
dir]
inputfiles[-J
option]
jar c[v0]mf
manifest jarfile[-C
dir]
inputfiles[-J
option]
[-e entrypoint]jar c[v0M] [-C
dir]
inputfiles[-J
option]
jar c[v0]m
manifest[-C
dir]
inputfiles[-J
option]
- JAR ファイルの更新
jar u[v0M]f
jarfile[-C
dir]
inputfiles[-J
option]
jar u[v0]mf
manifest jarfile[-C
dir]
inputfiles[-J
option]
[-e entrypoint]jar u[v0M] [-C
dir]
inputfiles[-J
option]
jar u[v0]m
manifest[-C
dir]
inputfiles[-J
option]
- JAR ファイルの抽出
jar x[v]f
jarfile[
inputfiles] [-J
option]
jar x[v] [
inputfiles] [-J
option]
- JAR ファイルの内容の表形式による一覧表示
jar t[v]f
jarfile[
inputfiles] [-J
option]
jar t[v] [
inputfiles] [-J
option]
- JAR ファイルへのインデックスの追加
jar i
jarfile[-J
option]
説明
cuxtiv0Mmf
jar
コマンドを制御するオプション- jarfile
- 作成 (
c
)、更新 (u
)、抽出 (x
)、または内容の一覧表示 (t
) の対象となる JAR ファイルのファイル名。f オプションとファイル名 jarfile とがペアになります。 つまり、片方を記述すれば、もう一方も記述する必要があります。f と jarfile を省略すると、標準入力から「JAR ファイル」が取得されるか (x および t の場合)、標準出力へ「JAR ファイル」が送信されます(c および u の場合)。- inputfiles
- jarfile に結合されるか (c および u の場合)、jarfile から抽出 (x の場合) または一覧表示 (t の場合) される、空白で区切られたファイルまたはディレクトリ。すべてのディレクトリは再帰的に処理されます。このファイルは、オプション -0 (ゼロ) を使用しないかぎり圧縮されます。
- manifest
- name :value のペアが、JAR ファイルの
MANIFEST.MF
に含まれている既存のマニフェストファイル。m オプションとファイル名 manifest とがペアになります。つまり、片方を記述すれば、もう一方も記述する必要があります。m と f の文字は、manifest と jarfile を記述した順序と同じ順序で記述する必要があります。- entrypoint
- 実行可能 JAR ファイル内にバンドルされたスタンドアロンアプリケーションのアプリケーションエントリポイントとして設定するクラスの名前。-e オプションと entrypoint は対になっています。どちらかを指定する場合は両方とも指定する必要があります。m、f、および e の出現順序は、manifest、jarfile、entrypoint の出現順序と一致する必要があります。
-C
dir- これに続く inputfiles 引数を処理する間、ディレクトリを dir へ一時的に変更します。-C dir inputfiles のセットは複数使用できます。
- -Joption
- Java 実行環境へ渡されるオプション。-J と option の間には空白を入れないでください。
jar ツールは、複数のファイルを 1 つの JAR アーカイブファイルに結合します。jar は、ZIP および ZLIB 圧縮形式をベースにした、汎用のアーカイブおよび圧縮ツールです。jar は、主に Java のアプレットやアプリケーションを 1 つのアーカイブにパッケージ化するのを容易にするために考案されました。アプレットやアプリケーションのコンポーネント (.class ファイル、イメージ、およびサウンド) が 1 つのアーカイブに結合されていると、Java エージェント (ブラウザなど) は、それらのコンポーネントを 1 回の HTTP トランザクションでダウンロードすることができ、コンポーネントごとに新しい接続を必要とすることがありません。これによって、ダウンロードの回数が大幅に減ります。また、jar はファイルを圧縮するので、ダウンロード時間も短くなります。また、ファイル内の個々のエントリにアプレット作成者による署名を書き込めるので、配布元の認証が可能になります。jar ツールの構文は、tar コマンドの構文とほぼ同じです。JAR アーカイブは、圧縮されているかどうかにかかわらず、クラスパスのエントリとして使用できます。複数のファイルを JAR ファイルへ結合する一般的な使用法は次のとおりです。
この例では、現在のディレクトリにあるクラス (.class) ファイルがすべて、myFile.jar という名前のファイルに格納されます。META-INF/MANIFEST.MF というマニフェストファイルエントリが jar ツールによって自動的に生成され、常に JAR ファイル内の先頭に置かれます。マニフェストファイルには、name :value のペアとして、アーカイブのメタ情報も格納されます。マニフェストファイルにメタ情報がどのようにして格納されるかについての詳細は、JAR ファイルの仕様を参照してください。C:\Java> jar cf myFile.jar *.class
JAR アーカイブを作成する場合に jar ツールで使用したい name
:
value のペアを持った既存のマニフェストファイルがある場合は、次のように、m オプションを使用して、マニフェストファイルを指定できます。C:\Java> jar cmf myManifestFile myFile.jar *.class既存のマニフェストファイルは改行文字で終わっている必要があります。マニフェストファイルが改行文字で終わっていない場合、jar はその最後の行を解析しません。
注: コマンド行に cmf ではなく cfm が指定された jar コマンド (-m と -f オプションの順番を逆にする) の場合、jar コマンド行にまず JAR アーカイブの名前を指定し、続いてマニフェストファイルの名前を指定する必要があります。次に例を示します。マニフェストは、RFC822 ASCII 形式で規定されたテキスト形式であるため、マニフェストファイルの内容を簡単に表示および編集できます。C:\Java> jar cfm myFile.jar myManifestFile *.classJAR ファイルからファイルを抽出するには、次のように -x を使用します。
C:\Java> jar xf myFile.jar
JAR ファイルから特定のファイルだけを抽出するには、そのファイル名を指定します。
C:\Java> jar xf myFile.jar foo bar
Java 2 SDK のバージョン 1.3 以降から、jar ユーティリティーで JarIndex がサポートされています。 JarIndex を使用すると、アプリケーションのクラスローダで JAR ファイルからクラスがロードされるときの効率が向上します。アプリケーションまたはアプレットが複数の JAR ファイルにバンドルされている場合は、クラスがロードされるときに、必要な JAR ファイル以外のダウンロードおよびオープンは行われません。このパフォーマンスの最適化は、新しい -i オプションを指定して jar を実行すると有効になります。このオプションを使うと、指定した JAR メインファイルと、そのメインファイルが依存しているすべての JAR ファイルについて、パッケージ位置情報が生成されます。メインファイルが依存している JAR ファイルは、JAR メインファイルのマニフェストの Class-Path 属性に指定しておく必要があります。
C:\Java> jar i main.jar
上の例では、INDEX.LIST ファイルが、main.jar のマニフェストの META-INF ディレクトリに挿入されます。
このファイルに格納されている情報を使用して、アプリケーションのクラスローダーは、効率的にクラスをロードします。インデックスファイルに位置情報を格納する方法の詳細は、JarIndex の仕様を参照してください。ディレクトリをコピーする標準的な方法は、まず dir1 内のファイルを標準出力に圧縮し、続いて標準入力から dir2 へ抽出します (両方の
jar
コマンドからf
を省略する)。C:\Java> (cd dir1; jar c .) | (cd dir2; jar x)
jar ツールを使用して JAR ファイルとそのマニフェストを操作する例は、このあとの「例」と、「Java チュートリアル」の「JAR Files」を参照してください。
- c
- jarfile の名前で新しいアーカイブファイルを作成するか (
f
が指定されている場合)、標準出力で作成します (f
と jarfile が省略されている場合)。inputfiles で指定されたファイルとディレクトリを、このアーカイブに追加します。- u
- inputfiles で指定されたファイルとディレクトリを追加することにより、既存のファイル jarfile を更新します (
f
が指定されている場合)。例を示します。上のコマンドは、ファイル foo.class を既存の JAR ファイル foo.jar に追加します。次の例に示すように、-u オプションは、マニフェストエントリも更新できます。jar uf foo.jar foo.classfoo.jar マニフェストをマニフェスト内の名前jar umf manifest foo.jar:
値ペアで更新します。- x
- jarfile から (
f
が指定されている場合)、または標準入力から (f
と jarfile が省略されている場合)、ファイルとディレクトリを抽出します。inputfiles が指定されている場合は、その指定したファイルとディレクトリだけが抽出されます。指定されていなければ、すべてのファイルとディレクトリが抽出されます。抽出されたファイルの日時は、アーカイブ内で設定されたものです。- t
- jarfile から (
f
が指定されている場合)、または標準入力から (f
と jarfile が省略されている場合)、内容を表形式で一覧表示します。inputfiles が指定されている場合は、その指定したファイルとディレクトリだけが一覧表示されます。指定されていなければ、すべてのファイルとディレクトリが一覧表示されます。- i
- 指定された jarfile と、それに依存する JAR ファイルについて、インデックス情報を生成します。例を示します。
jar i foo.jar上のコマンドは、
foo.jar
内にINDEX.LIST
ファイルを生成します。このファイルには、foo.jar
のfoo.jar
属性に指定されたすべての JAR ファイルに入っている各パッケージの位置情報が書き込まれています。インデックスの例を参照してください。Class-Path
- f
- 作成 (
c
)、更新 (u
)、抽出 (x
)、インデックス追加 (i
)、または表示 (t
) 対象のファイル jarfile を指定します。f オプションとファイル名 jarfile とがペアになります。 つまり、片方を記述すれば、もう一方も記述する必要があります。f
と jarfile を省略すると、標準入力から「JAR ファイル」が取得されるか (x および t の場合)、標準出力へ「JAR ファイル」が送信されます(c および u の場合)。- v
- 詳細な出力を標準出力に生成します。あとで例を示します。
- 0
- (ゼロ) ZIP による圧縮を使用せずに、保存します。
- M
- マニフェストファイルエントリを作成しません (c および u の場合)。または、マニフェストファイルエントリが存在する場合にそれを削除します (u の場合)。
- m
- META-INF/MANIFEST.MF のファイルで指定したマニフェストファイル manifest の name
:
value の属性ペアを組み込みます。同じ名前のペアがすでに存在している場合を除いて、name:
value のペアが追加されます。 同じ名前のペアが存在している場合は、その値が更新されます。コマンド行で、m と f の文字は、manifest と jarfile の入力順序と同じ順序で記述する必要があります。たとえば、次のようにして使います。
デフォルトのマニフェストには含まれないマニフェストに、特別な目的の name :value の属性アを追加できます。たとえば、ベンダー情報、バージョン情報、パッケージシーリング、または JAR にバンドルされたアプリケーションを実行するための属性を追加できます。-m オプションの使用例については、「Java Tutorial」の「JAR Files」コースを参照してください。jar cmf myManifestFile myFile.jar *.class- -e
- 実行可能 JAR ファイル内にバンドルされたスタンドアロンアプリケーションのアプリケーションエントリポイントとして、entrypoint を設定します。このオプションを使用すると、マニフェストファイル内の Main-Class 属性値が作成または上書きされます。 このオプションは、JAR ファイルの作成中または更新中に使用できます。 このオプションを使えば、マニフェストファイルを編集または作成することなしに、アプリケーションのエントリポイントを指定できます。
たとえば、次のコマンドはMain.jar
を作成しますが、その際、マニフェストファイル内の Main-Class 属性値はMain
に設定されます。jar cfe Main.jar Main Main.class次のコマンドを実行すると java ランタイムから直接このアプリケーションを起動できます。
エントリポイントのクラス名が特定のパッケージ内に存在している場合、エントリポイントの区切り文字としてドット (「.」) またはスラッシュ (「/」) を使用できます。たとえば、java -jar Main.jarMain.class
がfoo
という名前のパッケージ内に存在している場合、次のようにしてエントリポイントを指定できます。またはjar -cfe Main.jar foo/Main foo/Main.class注: -m オプションと -e オプションの両方を同時に指定する場合、指定されたマニフェストにも Main-Class 属性が含まれていると、jar -cfe Main.jar foo.Main foo/Main.classMain.class
の指定があいまいになってエラーが発生し、JAR の作成または更新処理が異常終了します。
- -C dir
- jar コマンドの実行中に後続の inputfiles 引数を処理するときに、一時的にディレクトリを変更します (
cd
dir)。この処理は、UNIX の tar ユーティリティーの -C オプションの機能に類似しています。例を示します。上のコマンドは、classes ディレクトリに移って、そのディレクトリから bar.class を foo.jar に追加します。次に別の例を示します。jar uf foo.jar -C classes bar.classclasses ディレクトリに変更し、classes ディレクトリ内のすべてのファイルを、foo.jar に追加します (この JAR ファイル内にクラスディレクトリは作成しない)。 次に、元のディレクトリに戻ってから、bin ディレクトリに変更して xyz.class を foo.jar に追加します。jar uf foo.jar -C classes . -C bin xyz.classclasses
にbar1
とbar2
が保持されている場合、jar tf foo.jar
を使用すると、JAR ファイルには次の要素が含められます。META-INF/
META-INF/MANIFEST.MF
bar1
bar2
xyz.class
-J
option- Java 実行環境に option を渡します。 option には、「Java アプリケーション起動ツール」のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、
-J-Xmx48M
と指定すると、最大メモリーは 48M バイトに設定されます。-J を使って背後の実行環境にオプションを渡すことはよく行われています。
jar のコマンド行を短くしたり簡潔にしたりするために、jar
コマンドに対する引数 (-J オプションを除く) を含む 1 つ以上のファイルを指定することができます。これにより、任意の長さの jar コマンドを作成でき、オペレーティングシステムによるコマンド行の制限から解放されます。引数ファイルにはオプションとファイル名を含めることができます。ファイル内の各引数は、スペースまたは改行で区切ります。引数ファイル内のファイル名は、現在のディレクトリから見た相対パスになります。引数ファイルの位置から見た相対パスではありません。ワイルドカード (*) は、通常ならばオペレーティングシステムシェルによってあらゆる文字に解釈されますが、この場合はそのようには解釈されません。引数ファイル内の引数で @ 文字を使用して、複数のファイルを再帰的に解釈することはサポートされていません。また、-J オプションもサポートされていません。このオプションは起動ツールに渡されますが、起動ツールでは引数ファイルをサポートしていないからです。
jar を実行するときに、各引数ファイルのパスとファイル名の先頭に
@
文字を付けて渡します。jar は、@
文字で始まる引数を見つけると、そのファイルの内容を展開して引数リストに挿入します。たとえば、次のようにして、「
classes.list
」という単一の引数ファイルに、複数のファイルの名前を保存します。C:\Java> dir /b *.class > classes.list
続いて、この引数ファイル内のファイル名を渡す jar コマンドを実行します。
引数ファイルは、パスを付けて渡すことができますが、相対パスを付けた引数ファイル内部のすべてのファイル名には、渡されるパスではなく、現在の作業用ディレクトリに対する相対パスが付けられます。この例を次に示します。C:\Java> jar cf my.jar @classes.list
C:\Java> jar @path1/classes.list
特定のディレクトリ内のすべてのファイルをアーカイブに追加する (そのアーカイブがすでに存在する場合は、その内容を上書きする) には、次のようにします。v オプションを使用して情報を詳細に列挙するように指定すると、サイズや最新の更新日など、アーカイブ内のファイルについての詳細情報が表示されます。JAR ファイルのエントリ名を表示するには、「t」オプションを使用します。C:\Java> dirすでに画像、オーディオファイル、およびクラス用のサブディレクトリに分けている場合は、これらを単一の JAR ファイルに結合できます。12/09/96 12:20a <DIR> . 12/09/96 12:17a <DIR> .. 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: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 10 File(s) 91,118 bytes C:\Java> jar cvf bundle.jar * adding manifest adding: 1.au adding: 2.au adding: 3.au adding: Animator.class adding: Wave.class adding: at_work.gif adding: monkey.jpg adding: spacemusic.au C:\Java> dir12/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 5 File(s) 207,360 bytes C:\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:\Java> 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 C:\Java> jar tf bundle.jarMETA-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 クラスロードを高速にするためにインデックスファイルを JAR ファイルに追加するには、「i」オプションを使用します。
株取引アプリケーション用の相互依存したクラスを、3 つの JAR ファイル、 main.jar、 buy.jar、および sell.jar に分割してみましょう。main.jar のマニフェストの Class-path 属性に次のように指定した場合、Class-Path: buy.jar sell.jar続いて次のように i オプションを使用すると、アプリケーションのクラスロードを高速化できます。C:\Java> jar i main.jarこの場合、INDEX.LIST
ファイルがMETA-INF
ディレクトリに追加されます。 これにより、アプリケーションのクラスローダがクラスまたはリソースを検索する際に、指定された JAR ファイルをダウンロードできるようになります。
「JAR ファイルの概要」
「JAR ファイルの仕様」
「JAR インデックス」
「JAR チュートリアル」 (Java Software の Web サイト内)
「pack200 リファレンスページ」
Copyright © 2004-2006 Sun Microsystems, Inc. All Rights Reserved. |
Java Software |