jar

Section: 基本ツール (1)
Updated: 2013年11月21日
Page Index
 

名前

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つのアーカイブに結合されていると、Javaエージェント(ブラウザなど)は、それらのコンポーネントを1回のHTTPトランザクションでダウンロードすることができ、コンポーネントごとに新しい接続が不要になります。これにより、ダウンロード時間が大幅に短縮されます。また、jarコマンドはファイルの圧縮も行うため、ダウンロード時間がさらに短縮されます。また、jarコマンドによって、ファイル内の個々のエントリにアプレット作成者による署名を書き込めるため、配布元の認証が可能になります。JARファイルは、圧縮されているかどうかにかかわらず、クラス・パスのエントリとして使用できます。

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

操作の引数

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

c

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

i

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

t

JARアーカイブのコンテンツをリストします。

u

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

x

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

オプション

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

e

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

たとえば、次のコマンドでは、Main.jarアーカイブがMain.classファイルとともに作成されますが、その際、マニフェスト内のMain-Class属性値は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

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

m

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

デフォルトのマニフェスト・ファイルには含まれないマニフェストに、特別な目的の名前-値の属性ペアを追加できます。たとえば、ベンダー情報、リリース情報、パッケージ・シーリングを指定する属性、またはJARにバンドルされたアプリケーションを実行可能にするための属性を追加できます。mオプションの使用例は、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ディレクトリに移動し、classesディレクトリ内のすべてのファイルをmy.jarに追加します(JARファイルにはclassesディレクトリを作成しません)。次に元のディレクトリに戻ってから、binディレクトリに移動し、Xyz.classmy.jarに追加します。

jar uf my.jar -C classes . -C bin Xyz.class
 
classesbar1ファイルとbar2ファイルが含まれている場合、前述のコマンドを実行した後、JARファイルには次のものが含まれます。

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

-Joption

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

オペランド

次のオペランドは、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オペランドを省略すると、jarコマンドに、stdinからのJARファイル名を受け入れるか(xおよびtの場合)、JARファイルをstdoutに送信すること(cおよびuの場合)が指示されます。

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 索引の追加

株式取引のアプリケーションの相互依存クラスを、main.jarbuy.jarおよびsell.jarの3つのJARファイルに分割する場合、iオプションを使用します。main.jarマニフェスト内のClass-Path属性を指定する場合、iオプションを使用して、アプリケーションのクラス・ロードの速度を向上できます。

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

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

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

関連項目

pack200(1).

http://docs.oracle.com/javase/tutorial/deployment/jar/index.htmlにある JavaチュートリアルのJARに関する項


 

Index

名前
概要
説明
操作の引数
オプション
オペランド
注意
関連項目