| 圧縮展開 | |||||||||||
例えば、Sample3_1ではSample3_1.classとSample3_1$1.classというファイルが生成されて、実行にはこの2つのファイルが必要でした。この2つのファイルをまとめるためのコマンドは jar cf Sample3_1.jar Sample3_1.class Sample3_1$1.class となります。 また、たとえばSample13_4では5つのclassファイルが生成されました。これらのクラスファイルをすべていちいち指定するのは面倒です。圧縮するファイルの指定には*や?などのワイルドカード文字が使えます。ワイルドカード文字を使ってSample13_4に必要なclassファイルをまとめるコマンドは
先ほど例に出したSample13_4.jarを解凍してファイルを取り出すには
とします。 ここで、解凍したときにMETA-INFというフォルダが作成されています。また、このフォルダにはMANIFEST.MFというファイルが作成されています。MANIFEST.MFには圧縮に使ったjarコマンドのバージョンなどが記述されています。
このフォルダをJARファイルに含めたくないときには、圧縮時にMオプションをつけて
とします。 | |||||||||||
| 実行可能なJARファイル | |||||||||||
マニュフェストファイルは以下のように記述します。
セミコロン「:」の後のスペースも省略できません。 Sample13_4の場合では以下のようなファイルになります。ファイル名はなんでもかまわないのですが、ここではSample13_4.mfというファイル名にします。
たとえば、Sample13_4で実行可能なJARファイルを作成するコマンドは
オプションをcmfと指定したときには
のような順番になります。
Sample13_4.jarを実行するコマンドは
Windows98やWindows2000などでJREやNetscape6がインストールされている場合は、JARファイルをダブルクリックしただけで起動できることもあります。
しかし、JARファイルを実行するときには環境変数CLASSPATHやjavaコマンドのオプションは無視されてしまいます。 これを回避する方法はいくつかありますが、どの方法もそれぞれ問題があります。 マニフェストファイルに記述する マニュフェストファイルにクラスパスを相対パスで記述することができます。
javacコマンドでクラスパスとしてJARファイルを指定する JARファイルを実行するときに
このようにして実行するときには、JARファイルを作成するときにマニフェストファイルを指定する必要はありません。 Sample13_4.jarを実行するときには
ライブラリをlib/extディレクトリに置く ライブラリのJARファイルをlib/extディレクトリに置くと、javaコマンドやjavacコマンド実行時にクラスの検索対象になります。そのため、必要なライブラリのファイルをlib/extディレクトリに置いておけば実行可能なJARファイルも問題なく実行することができます。 また、この場合は通常のclassファイルの実行やjavacでのコンパイルでも環境変数CLASSPATHを設定する必要がありません。 しかし、Windows環境では、lib/extディレクトリが複数の場所にあることがあり、javacコマンドとjavaコマンド、そしてjarファイルをダブルクリックしたときとで、検索するlib/extディレクトリが違うことがあります。 これらのlib/extすべてにライブラリファイルを置く必要があります。 検索するlib/extディレクトリは、JBuilderなどインストールしたツールによっても変わることがあります。 ライブラリもJARファイルに含める JARファイルを作成するときにライブラリも含めてしまえば、クラスパスの問題は解消します。 ただし、ライブラリをJARで圧縮された状態のままJARファイルに含めても使うことはできません。いったん解凍してからJARファイルに含める必要があります。 この方法をとると、通常の実行可能なJARファイルと同様に扱うことができます。また、配布先のコンピュータにライブラリがインストールされている必要がなく、インストールされているライブラリのバージョンが必要なバージョンと違うなどの問題も回避できます。しかしライブラリのサイズが大きいときには向きません。また、ライブラリのライセンスがこのような配布方法を認めていないこともあります。 |