Java Platform, Standard Editionツール・リファレンス
目次      

jar

Java Archive (JAR)ファイルを操作します。

形式

JARファイルの作成

jar c[efmMnv0] [entrypoint] [jarfile] [manifest] [-C dir] file ... [-Joption ...] [@arg-file ...]

JARファイルの更新

jar u[efmMnv0] [entrypoint] [jarfile] [manifest] [-C dir] file ... [-Joption ...] [@arg-file ...]

JARファイルの抽出

jar x[vf] [jarfile] file ... [-Joption ...] [@arg-file ...]

JARファイルの内容の一覧表示

jar t[vf] [jarfile] file ... [-Joption ...] [@arg-file ...]

JARファイルへの索引の追加

jar i jarfile [-Joption ...] [@arg-file ...]

説明

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

jarコマンドの構文は、tarコマンドの構文と似ています。必須の操作引数のいずれかで定義された複数の操作モードがあります。その他の引数は、操作の動作を変更するオプションと、操作を実行するために必要なオペランドのいずれかです。

操作引数

jarコマンドを使用するときは、次の操作引数のいずれかを指定して、実行される操作を選択する必要があります。コマンド行でその他の1文字のオプションを使用すれば、これらの引数を混在させることができますが、通常、操作引数は1番目に指定された引数です。

c

新しいJARアーカイブを作成します。

i

JARアーカイブの索引情報を生成します。

t

JARアーカイブの内容を一覧表示します。

u

JARアーカイブを更新します。

x

JARアーカイブからファイルを抽出します。

オプション

JARファイルを作成、更新、抽出または表示する方法をカスタマイズするには、次のオプションを使用します。

e

実行可能JARファイル内にバンドルされたスタンドアロンのJavaアプリケーションのエントリ・ポイントとなるように、entrypointオペランドで指定されたクラスを設定します。このオプションを使用すると、マニフェスト・ファイル内のMain-Class属性値が作成またはオーバーライドされます。eオプションは、JARファイルを作成(c)または更新(u)する際に使用できます。

たとえば、次のコマンドはMain.classファイルとともにMain.jarアーカイブを作成しますが、その際に、マニフェスト・ファイル内のMain-Clas属性値はMainに設定されます。

jar cfe Main.jar Main Main.class

次のコマンドを実行すると、Java Runtime Environment (JRE)から直接このアプリケーションを呼び出すことができます。

java -jar Main.jar

エントリ・ポイントのクラス名が特定のパッケージ内に存在している場合、区切り文字としてドット(.)またはスラッシュ(/)を使用できます。たとえば、Main.classmydirという名前のパッケージ内に存在している場合、次の方法のいずれかでエントリ・ポイントを指定できます。

jar -cfe Main.jar mydir/Main mydir/Main.class
jar -cfe Main.jar mydir.Main mydir/Main.class

注:

特定のマニフェストにもMain-Class属性が含まれているときに、-mオプションとeオプションの両方を同時に指定すると、Main.classの指定があいまいになります。あいまいになるとエラーが発生し、jarコマンドの作成または更新操作が終了します。

f

作成(c)、更新(u)、抽出(x)または表示(t)されるJARファイルの名前となるように、jarfileオペランドで指定されたファイルを設定します。fオプションとjarfileオペランドを省略すると、stdinからJARファイル名を受け入れたり(xおよびtの場合)、stdoutにJARファイルを送信したり(cおよびuの場合)するように、jarコマンドが指示されます。

m

manifestオペランドで指定されたファイルから属性の名前と値を、(META-INF/MANIFEST.MFのアーカイブに配置されている) jarコマンドのマニフェスト・ファイルに取り込みます。すでに同じ名前を持つエントリが存在しなければ、jarコマンドは属性の名前と値をJARファイルに追加します。存在する場合、jarコマンドは属性の値を更新します。mオプションは、JARファイルを作成(c)または更新(u)する際に使用できます。

デフォルトのマニフェスト・ファイルには含まれないマニフェストに、特別な目的の名前と値の属性ペアを追加できます。たとえば、ベンダー情報、リリース情報、パッケージ・シーリングまたはJARにバンドルされたアプリケーションを実行するための属性を追加できます。mオプションの使用例については、「Packaging Programs」を参照してください。
http://docs.oracle.com/javase/tutorial/deployment/jar/index.html

M

マニフェスト・ファイルのエントリを作成しません(cおよびuの場合)。または、マニフェスト・ファイルのエントリが存在する場合にそれを削除します(uの場合)。Mオプションは、JARファイルを作成(c)または更新(u)する際に使用できます。

n

JARファイルを作成する(c)ときに、このオプションを使用すると、内容がpack200(1)コマンドの圧縮および解凍操作の影響を受けないようにアーカイブが正規化されます。このように正規化されないと、署名付きJARのシグネチャが無効になる可能性があります。

v

詳細な出力を標準出力に生成します。「」を参照してください。

0

(ゼロ) ZIP圧縮を使用せずに、JARファイルを作成(c)または更新(u)します。

-C dir

JARファイルを作成(c)または更新(u)するときに、このオプションを使用すると、fileオペランドで指定されたファイルを処理する際にディレクトリが一時的に変更されます。この操作は、tarユーティリティの-Cオプションと同様になることを目的としています。たとえば、次のコマンドによって、classesディレクトリに変更され、そのディレクトリからmy.jarBar.classファイルが追加されます。

jar uf my.jar -C classes Bar.class

次のコマンドは、classesディレクトリに移動し、(JARファイル内にclassesディレクトリを作成せずに) classesディレクトリ内のすべてのファイルをmy.jarに追加します。次に、元のディレクトリに戻ってからbinディレクトリに移動して、Xyz.classmy.jarに追加します。

jar uf my.jar -C classes . -C bin Xyz.class

classesbar1bar2ファイルが含まれている場合、前述のコマンドを実行すると、次のものがJARファイルに追加されます。

% jar tf my.jar
META-INF/
META-INF/MANIFEST.MF
bar1
bar2
Xyz.class
-Joption

JREでJARファイルが実行されるときに使用されるように、指定したJVMオプションを設定します。JVMオプションについては、java(1)コマンドのリファレンス・ページで説明されています。たとえば、-J-Xms48mと指定すると、スタートアップ・メモリーは48Mバイトに設定されます。

オペランド

次のオペランドは、jarコマンドで認識されます。

file

JARファイルを作成(c)または更新(u)するときに、fileオペランドを使用すると、アーカイブに追加されるファイルまたはディレクトリのパスと名前が定義されます。JARファイルを抽出(x)またはその内容を一覧表示(t)するときに、fileオペランドを使用すると、抽出または一覧表示されるファイルのパスと名前が定義されます。有効なファイルまたはディレクトリを少なくとも1つ指定する必要があります。複数のfileオペランドは空白文字で区切ります。entrypointjarfileまたはmanifestオペランドを使用する場合は、その後にfileオペランドを指定する必要があります。

entrypoint

JARファイルを作成(c)または更新(u)するときに、entrypointオペランドを使用すると、実行可能JARファイルにバンドルされたスタンドアロンのJavaアプリケーションのエントリ・ポイントとなるクラスの名前が定義されます。eオプションが存在する場合は、entrypointオペランドを指定する必要があります。

jarfile

作成(c)、更新(u)、抽出(x)または表示(t)されるファイルの名前を定義します。fオプションが存在する場合は、jarfileオペランドを指定する必要があります。fオプションとjarfileオペランドを省略すると、stdinからJARファイル名を受け入れたり(xおよびtの場合)、stdoutにJARファイルを送信したり(cおよびuの場合)するように、jarコマンドが指示されます。

JARファイルの索引を作成(i)するときは、fオプションを付けずにjarfileオペランドを指定します。

manifest

JARファイルを作成(c)または更新(u)するときに、manifestオペランドを使用すると、JARファイル内のMANIFEST.MFに含まれる属性の名前と値を持つ既存のマニフェスト・ファイルが定義されます。fオプションが存在する場合は、manifestオペランドを指定する必要があります。

@arg-file

jarコマンド行を短くしたり簡潔にしたりするために、引数を個別のテキスト・ファイルに指定し、接頭辞としてアット・マーク(@)を付けてjarコマンドに渡すことができます。jarコマンドは、アット・マークで始まる引数を見つけると、そのファイルの内容を展開して引数リストに挿入します。

引数ファイルには、jarコマンドのオプションおよび引数を含めることができます(ただし、-Jオプションはランチャに渡されますが、引数ファイルをサポートしていないため除外されます)。ファイル内の引数は、空白文字または改行文字で区切ることができます。引数ファイル内のファイル名は、jarコマンドを実行する現在のディレクトリから見た相対パスであり、引数ファイルの位置から見た相対パスではありません。アスタリスク(*)などのワイルドカードは、通常ならばオペレーティング・システム・シェルによって展開されますが、この場合は展開されません。

次の例では、findコマンドによる現在のディレクトリ出力からのファイルの名前を持つclasses.listファイルを作成する方法を示します。

find . -name '*.class' -print > classes.list

その後、jarコマンドを実行し、@arg-file構文を使用してclasses.listファイルを渡すことができます。

jar cf my.jar @classes.list

引数ファイルにはパスを指定できますが、相対パスが記述された引数ファイル内のすべてのファイル名は、次の例で示すように、渡されたパスに対して相対的ではなく、jarコマンドの現在の作業ディレクトリに相対的となります。

jar @dir/classes.list

efおよびmオプションは、次の例で示すように、entrypointjarfileおよびmanifestオペランドと同じ順序でコマンド行に出現する必要があります。

jar cmef myManifestFile MyMainClass myFile.jar *.class

例1 - 詳細出力で現在のディレクトリからすべてのファイルを追加する
% 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%)
例2 - サブディレクトリからファイルを追加する
% 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/
例3 - JARの内容を一覧表示する
% 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
例4 - 索引を追加する

iオプションは、株取引アプリケーション用の相互依存したクラスを、3つのJARファイル(main.jarbuy.jarおよびsell.jar)に分割する際に使用します。main.jarマニフェストにClass-Path属性を指定する場合は、iオプションを使用すると、アプリケーションにおけるクラスのロード時間を短縮できます。

Class-Path: buy.jar sell.jar
jar i main.jar

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

このファイルに格納されている情報を使用して、アプリケーションのクラス・ローダーは、効率的にクラスをロードします。ディレクトリをコピーするには、まずdir1内のファイルを圧縮してstdoutに出力し、続いてstdinから抽出してパイプラインでdir2に渡します(両方のjarコマンドから-fオプションを省く)。

(cd dir1; jar c .) | (cd dir2; jar x)

関連項目

目次      

Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved.