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番目に指定された引数です。
新しいJARアーカイブを作成します。
JARアーカイブの索引情報を生成します。
JARアーカイブの内容を一覧表示します。
JARアーカイブを更新します。
JARアーカイブからファイルを抽出します。
JARファイルを作成、更新、抽出または表示する方法をカスタマイズするには、次のオプションを使用します。
実行可能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.class
がmydir
という名前のパッケージ内に存在している場合、次の方法のいずれかでエントリ・ポイントを指定できます。
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 コマンドの作成または更新操作が終了します。 |
作成(c)、更新(u
)、抽出(x
)または表示(t
)されるJARファイルの名前となるように、jarfile
オペランドで指定されたファイルを設定します。 f
オプションとjarfileオペランドを省略すると、stdin
からJARファイル名を受け入れたり(x
およびt
の場合)、stdout
にJARファイルを送信したり(c
およびu
の場合)するように、jar
コマンドが指示されます。
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
マニフェスト・ファイルのエントリを作成しません(c
およびu
の場合)。または、マニフェスト・ファイルのエントリが存在する場合にそれを削除します(u
の場合)。 M
オプションは、JARファイルを作成(c
)または更新(u
)する際に使用できます。
JARファイルを作成する(c
)ときに、このオプションを使用すると、内容がpack200
(1)コマンドの圧縮および解凍操作の影響を受けないようにアーカイブが正規化されます。 このように正規化されないと、署名付きJARのシグネチャが無効になる可能性があります。
詳細な出力を標準出力に生成します。 「例」を参照してください。
(ゼロ) ZIP圧縮を使用せずに、JARファイルを作成(c
)または更新(u
)します。
JARファイルを作成(c
)または更新(u
)するときに、このオプションを使用すると、fileオペランドで指定されたファイルを処理する際にディレクトリが一時的に変更されます。 この操作は、tar
ユーティリティの-C
オプションと同様になることを目的としています。たとえば、次のコマンドによって、classes
ディレクトリに変更され、そのディレクトリからmy.jar
にBar.class
ファイルが追加されます。
jar uf my.jar -C classes Bar.class
次のコマンドは、classes
ディレクトリに移動し、(JARファイル内にclasses
ディレクトリを作成せずに) classesディレクトリ内のすべてのファイルをmy.jar
に追加します。次に、元のディレクトリに戻ってからbin
ディレクトリに移動して、Xyz.class
をmy.jar
に追加します。
jar uf my.jar -C classes . -C bin Xyz.class
classes
にbar1
とbar2
ファイルが含まれている場合、前述のコマンドを実行すると、次のものがJARファイルに追加されます。
% jar tf my.jar
META-INF/
META-INF/MANIFEST.MF
bar1
bar2
Xyz.class
JREでJARファイルが実行されるときに使用されるように、指定したJVMオプションを設定します。 JVMオプションについては、java
(1)コマンドのリファレンス・ページで説明されています。 たとえば、-J-Xms48m
と指定すると、スタートアップ・メモリーは48Mバイトに設定されます。
次のオペランドは、jar
コマンドで認識されます。
JARファイルを作成(c
)または更新(u
)するときに、fileオペランドを使用すると、アーカイブに追加されるファイルまたはディレクトリのパスと名前が定義されます。 JARファイルを抽出(x
)またはその内容を一覧表示(t
)するときに、fileオペランドを使用すると、抽出または一覧表示されるファイルのパスと名前が定義されます。 有効なファイルまたはディレクトリを少なくとも1つ指定する必要があります。 複数のfileオペランドは空白文字で区切ります。 entrypoint、jarfileまたはmanifestオペランドを使用する場合は、その後にfileオペランドを指定する必要があります。
JARファイルを作成(c
)または更新(u
)するときに、entrypointオペランドを使用すると、実行可能JARファイルにバンドルされたスタンドアロンのJavaアプリケーションのエントリ・ポイントとなるクラスの名前が定義されます。 eオプションが存在する場合は、entrypoint
オペランドを指定する必要があります。
作成(c
)、更新(u
)、抽出(x
)または表示(t
)されるファイルの名前を定義します。 fオプションが存在する場合は、jarfile
オペランドを指定する必要があります。 f
オプションとjarfileオペランドを省略すると、stdin
からJARファイル名を受け入れたり(x
およびt
の場合)、stdout
にJARファイルを送信したり(c
およびu
の場合)するように、jar
コマンドが指示されます。
JARファイルの索引を作成(i
)するときは、fオプションを付けずにjarfile
オペランドを指定します。
JARファイルを作成(c
)または更新(u
)するときに、manifestオペランドを使用すると、JARファイル内のMANIFEST.MF
に含まれる属性の名前と値を持つ既存のマニフェスト・ファイルが定義されます。 fオプションが存在する場合は、manifest
オペランドを指定する必要があります。
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
e
、f
およびm
オプションはentrypoint、jarfileおよびmanifestオペランドと同じ順序でコマンド行に出現する必要があります。たとえば:
jar cmef myManifestFile MyMainClass myFile.jar *.class
% 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%)
% 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 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
i
オプションは、株取引アプリケーション用の相互依存したクラスを、3つのJARファイル(main.jar
、buy.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)