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
i
t
u
x
次のオプションを使用して、JARファイルを作成、更新、抽出または表示する方法をカスタマイズします。
e
たとえば、次のコマンドでは、Main.jarアーカイブがMain.classファイルとともに作成されますが、その際、マニフェスト内のMain-Class属性値はMainに設定されます。
jar cfe Main.jar Main Main.class
java -jar Main.jar
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
m
デフォルトのマニフェスト・ファイルには含まれないマニフェストに、特別な目的の名前-値の属性ペアを追加できます。たとえば、ベンダー情報、リリース情報、パッケージ・シーリングを指定する属性、またはJARにバンドルされたアプリケーションを実行可能にするための属性を追加できます。mオプションの使用例は、http://docs.oracle.com/javase/tutorial/deployment/jar/index.htmlにある プログラムのパッケージ化に関する項を参照してください。
M
n
v
0
-C dir
jar uf my.jar -C classes Bar.class
jar uf my.jar -C classes . -C bin Xyz.class
% jar tf my.jar META-INF/ META-INF/MANIFEST.MF bar1 bar2 Xyz.class
-Joption
次のオペランドは、jarコマンドで認識されます。
file
entrypoint
jarfile
JARファイルを索引付け(i)する場合は、fオプションを指定しないでjarfileオペランドを指定します。
manifest
@arg-file
引数ファイルには、jarコマンドのオプションと引数(引数ファイルをサポートしない起動ツールに渡される-Jオプションを除く)を含めることができます。ファイル内の引数は、空白または改行文字で区切ることができます。引数ファイル内のファイル名は、jarコマンドを実行できる現在のディレクトリに対して相対的であり、引数ファイルの場所に対しては相対的ではありません。通常はオペレーティング・システム・シェルによって展開されるアスタリスク(*)などのワイルドカードは展開されません。
次の例は、findコマンドによる現在のディレクトリ出力からのファイル名でclasses.listファイルを作成する方法を示します。
find . -name '*.class' -print > classes.list
jar cf my.jar @classes.list
jar @dir/classes.list
e、fおよびmオプションは、entrypoint、jarfileおよび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 索引の追加
Class-Path: buy.jar sell.jar jar i main.jar
アプリケーションのクラス・ローダーは、このファイルに格納されている情報を使用して、効率的にクラスをロードします。ディレクトリをコピーするには、最初にdir1内のファイルをstdoutに圧縮してから、stdinからdir2にパイプラインを作成して抽出します(-fオプションは両方のjarコマンドで省略します)。
(cd dir1; jar c .) | (cd dir2; jar x)