Jarは Javaアプリケーションのために新たに提供されるようになった
システム非依存の圧縮・アーカイブ形式です。
もっとも、
その実体はほとんど zip形式のファイルと考えてもかまいません。
Jarは原理的にはあらゆる圧縮形式に対応できる仕様になっていますが、
現在のところ選択できるのは zip形式かもしくは全く圧縮をしない(0オプション)
かのいずれかです。
zip形式との一番の違いは「マニフェスト・ファイル(manifest file)」
と呼ばれるものをつけ加えることができる点です(省略も可)。
マニフェスト・ファイルには、
アーカイブに含まれる個々のファイルについての情報が記憶されます。
これによってファイルのセキュリティを強化することが可能になります。
また Jar形式のアーカイブは zip形式のアーカイブ同様、
クラスライブラリとしてそのまま機能します。
JDK1.1 には Jarファイルを取り扱うツールとして jarコマンドが用意されています。
jarコマンドはオプション指定に多少クセがあります。
これは UNIXのアーカイブコマンド tarの仕様を継承しているためです。
jar はアーカイブの生成、アーカイブからのファイルの復活の両方に用いられます。
その他、アーカイブに含まれるファイルの一覧の表示のみを行うこともできます。
これらは c,x,t のオプションによって指定します。
fオプションの後に、取り扱う(新たに生成する)Jarファイルの名前を指定します。
オプションとJarファイル以外の引数は、
アーカイブに保存する(もしくはアーカイブから復活させたい)ファイルもしくは
ディレクトリ名と見なされます。
ディレクトリの内部はその全てのサブディレクトリに対してリカーシブに処理されます。
Jarファイルの名前に特別な制限はなく、
識別子 .jarを付けなくてもかまいません。
vオプションは作業の途中の状況を標準出力に表示させます。
実例で見てみましょう。たとえばカレントディレクトリのバイトコードのファイルを
まとめて classes.jar という名前のファイルにしたいならば次のようにします。
jar cvf classes.jar *.class
逆に Jarファイルを解凍してファイルシステムに展開させるには次のようにします。
jar xvf classes.jar
mオプションは既にあるマニフェストファイルの情報も取り込むことを指定します。
この場合にはファイル名は、マニフェスト・ファイル、Jarファイル、保存ファイル
(ディレクトリ)の順になります。
mオプションで指定したファイルがそのままマニフェスト・ファイルに
なるわけではなく、新たにアーカイブ化されるファイルに関する情報はさらに
追加されて新しいマニフェスト・ファイルとなります。
jar cvmf mfile classes.jar *.class
Mオプションはマニフェスト・ファイルを生成しないようにする指定です。
このオプションを明示的に指定しない限り、jarコマンドはマニフェスト・ファイルを
自動的に生成します。
Jarファイルを展開すると、マニフェストファイルも一緒に展開され、
その内容を見ることができます。
META-INFという名前のディレクトリの中のMANIFEST.MF という名前です。
Manifest-Version: 1.0
Name: image.gif
Digest-Algorithms: SHA MD5
SHA-Digest: ObzVzHu9npf1E++oFk6pxtJxwZE=
MD5-Digest: pVM4BI20OgPIYaefH+BJnQ==
:
:
マニフェスト・ファイルの形式を簡単にまとめておきましょう。