jar c[v0Mmfe] [
manifest] [
jarfile] [
entrypoint] [-C
dir]
inputfiles [-J
option]
jar u[v0Mmfe] [
manifest] [
jarfile] [
entrypoint] [-C
dir]
inputfiles [-J
option]
jar x[vf] [
jarfile] [
inputfiles] [-J
option]
jar t[vf] [
jarfile] [
inputfiles] [-J
option]
jar i
jarfile [-J
option]
以下にそれぞれの意味を示します。
cuxtiv0Mmfe
jar
コマンドを制御するオプション。c
)、更新 (u
)、抽出 (x
)、または内容の一覧表示 (t
) の対象となる JAR ファイル。-f オプションとファイル名 jarfile は対になっています。どちらかを指定する場合は両方とも指定する必要があります。f
と jarfile を省略すると、標準入力から「JAR ファイル」が取得されるか (x および t の場合)、標準出力へ「JAR ファイル」が送信されます (c および u の場合)。:
value のペアが含まれている既存のマニフェストファイル。-m オプションとファイル名 manifest は対になっています。どちらかを指定する場合は両方とも指定する必要があります。m、f、および e 文字は、manifest、jarfile、および entrypoint が出現する順序と同じ順序で出現する必要があります。-C
dir-C
dir inputfiles のセットは複数使用できます。-J
option複数のファイルを JAR ファイルへ結合する一般的な使用法は次のとおりです。
% jar cf myFile.jar *.classこの例では、現在のディレクトリにあるクラス (.class) ファイルがすべて、myFile.jar という名前のファイルに格納されます。jar ツールは自動的に、
META-INF/MANIFEST.MF
という名前のマニフェストファイルエントリを生成します。これは常に、JAR ファイルの最初のエントリになります。マニフェストファイルは、アーカイブに関するメタ情報を宣言し、そのデータを name : value ペアとして格納します。jar ツールがマニフェストファイル内にメタ情報を格納する方法の詳細については、「JAR ファイルの仕様」を参照してください。
既存のマニフェストファイル内に格納された name : value ペアを JAR ファイルに含める必要がある場合には、そのファイルを次のように -m オプションを使って指定します。
% jar cmf myManifestFile myFile.jar *.class既存のマニフェストファイルは改行文字で終わっている必要があります。マニフェストファイルが改行文字で終わっていない場合、jar はその最後の行を解析しません。
% jar cfm myFile.jar myManifestFile *.classマニフェストは、RFC822 ASCII 形式で規定されたテキスト形式であるため、マニフェストファイルの内容を簡単に表示および編集できます。
JAR ファイルからファイルを抽出する場合は、x
を使用します。
% jar xf myFile.jar
jar ファイルから個別のファイルを抽出する場合は、そのファイル名を指定します。
% jar xf myFile.jar foo bar
JDK 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 仕様を参照してください。
ディレクトリをコピーするには、まず dir1
内のファイルを圧縮して stdout
に出力し、続いて stdin
から dir2
に抽出します (両方の jar
コマンドから -f オプションを省く)。次に例を示します。
% (cd dir1; jar c .) | (cd dir2; jar x)
jar
を使って JAR ファイルや JAR ファイルマニフェストを操作するコマンドサンプルを確認するには、「例」を参照してください。また、「Java Tutorial」の JAR コースも参照してください。
f
が指定されている場合)、標準出力で作成します (f
と jarfile が省略されている場合)。inputfiles で指定されたファイルとディレクトリを、このアーカイブに追加します。f
が指定されている場合)。たとえば、
jar uf foo.jar foo.class上のコマンドは、ファイル foo.class を既存の JAR ファイル foo.jar に追加します。次の例に示すように、-u オプションは、マニフェストエントリも更新できます。
jar umf manifest foo.jarfoo.jar マニフェストを manifest 内の name : value ペアで更新します。
f
が指定されている場合)、または標準入力から (f
と jarfile が省略されている場合)、ファイルとディレクトリを抽出します。inputfiles が指定されている場合は、その指定したファイルとディレクトリだけが抽出されます。指定されていなければ、すべてのファイルとディレクトリが抽出されます。抽出されたファイルの日時は、アーカイブ内で設定されたものです。f
が指定されている場合)、または標準入力から (f
と jarfile が省略されている場合)、内容を表形式で一覧表示します。inputfiles が指定されている場合は、その指定したファイルとディレクトリだけが一覧表示されます。指定されていなければ、すべてのファイルとディレクトリが一覧表示されます。jar i foo.jar
上のコマンドは、foo.jar 内に INDEX.LIST ファイルを生成します。このファイルには、foo.jar と、foo.jar の Class-Path 属性に指定されたすべての JAR ファイルに入っている各パッケージの位置情報が書き込まれています。インデックスの例を参照してください。
c
)、更新 (u
)、抽出 (x
)、インデックス追加 (i
)、または表示 (t
) 対象のファイル jarfile を指定します。-f オプションとファイル名 jarfile は対になっています。指定する場合は両方とも指定する必要があります。f
と jarfile を省略すると、stdin
から JAR ファイル名が使用されたり (x および t の場合)、stdout
に jar ファイルが送信されたりします (c および u の場合)。jar
はその name : value ペアを追加します。同じ名前で存在する場合、jar
はその値を更新します。jar cmf myManifestFile myFile.jar *.classデフォルトのマニフェストには含まれないマニフェストに、特別な目的の name : value の属性ペアを追加できます。たとえば、ベンダー情報、バージョン情報、パッケージシーリング、または JAR にバンドルされたアプリケーションを実行するための属性を追加できます。-m オプションの使用例については、「Java Tutorial」にある「Packaging Programs in JAR Files」コースを参照してください。
Main.jar
を作成しますが、その際、マニフェストファイル内の Main-Class 属性値は Main
に設定されます。
jar cfe Main.jar Main Main.class次のコマンドを実行すると java ランタイムから直接このアプリケーションを起動できます。
java -jar Main.jarエントリポイントのクラス名が特定のパッケージ内に存在している場合、エントリポイントの区切り文字としてドット (「.」) またはスラッシュ (「/」) を使用できます。たとえば、
Main.class
が foo
という名前のパッケージ内に存在している場合、次のようにしてエントリポイントを指定できます。
jar -cfe Main.jar foo/Main foo/Main.classまたは
jar -cfe Main.jar foo.Main foo/Main.class注:
-m
オプションと -e オプションの両方を同時に指定する場合、指定されたマニフェストにも Main-Class 属性が含まれていると、Main.class
の指定があいまいになってエラーが発生し、JAR の作成または更新処理が異常終了します。
cd
dir)。この処理は、UNIX の tar ユーティリティーの -C オプションの機能に類似しています。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.class
classes
に bar1
と bar2
が保持されている場合、jar tf foo.jar
を実行すると、JAR ファイルに格納される内容が次のように表示されます。
META-INF/ META-INF/MANIFEST.MF bar1 bar2 xyz.class
-J-Xmx48M
と指定すると、最大メモリーは 48M バイトに設定されます。-J を使って背後の実行環境にオプションを渡すことはよく行われています。jar
コマンドに対する引数 (-J
オプションを除く) を含む 1 つ以上のファイルを指定することができます。これにより、任意の長さの jar コマンドを作成でき、オペレーティングシステムによるコマンド行の制限から解放されます。
引数ファイルにはオプションとファイル名を含めることができます。ファイル内の各引数は、スペースまたは改行で区切ります。引数ファイル内のファイル名は、現在のディレクトリから見た相対パスになります。引数ファイルの位置から見た相対パスではありません。ワイルドカード (*) は、通常ならばオペレーティングシステムシェルによってあらゆる文字に解釈されますが、この場合はそのようには解釈されません。引数ファイル内の引数で @ 文字を使用して、複数のファイルを再帰的に解釈することはサポートされていません。-J オプションもサポートされていません (起動ツールには渡されますが、それが引数ファイルをサポートしていないため)。
jar
を実行するときに、各引数ファイルのパスとファイル名の先頭に @ を付けて渡します。jar
は、@ 文字で始まる引数を見つけると、そのファイルの内容を展開して引数リストに挿入します。
次の例では、find
コマンドから出力されたファイル名を classes.list
内に格納しています。
% find . -name '*.class' -print > classes.list
その後、引数ファイル構文を使って jar
にリストを渡すと、Classes.list
で jar
コマンドを実行できます。
% jar cf my.jar @classes.list引数ファイルはパスを指定できますが、相対パスが記述された引数ファイル内のすべてのファイル名は、渡されたパスに対して相対的ではなく、現在の作業ディレクトリに相対的となります。次に例を示します。
% jar @path1/classes.list
% 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%)すでに画像、オーディオファイル、およびクラス用のサブディレクトリに分けている場合は、これらを単一の JAR ファイルに結合できます。
% 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/JAR ファイルのエントリ名を表示するには、t オプションを使用します。
% 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
クラスロードを高速にするためにインデックスファイルを JAR ファイルに追加するには、-i オプションを使用します。
例:
Class-Path: buy.jar sell.jar-i オプションを使用すれば、アプリケーションのクラスの読み込みを高速化できます。
% jar i main.jar
INDEX.LIST
ファイルが META-INF
ディレクトリに挿入されます。この結果、アプリケーションのクラスローダーによってクラスまたはリソースの検索が行われるときに、適切な jar ファイルがダウンロードされます。