JAR ファイルの作成
Java アーカイブでクラスファイルをまとめる
Java はかなり厳格な「オブジェクト指向言語」ということで、物理的なファイルまでクラス単位に分割する必要があります。
ただし、内部クラスや非公開のクラスはファイル分割の必要はありません。
そして、それぞれのソースファイル毎にコンパイルできて、それが *.class ファイルとして作成されます。
こうした流れは 「Java の分割コンパイルとクラスパス」でみたとおりです。
しかし、ひとつのプログラムはひとつのファイルにまとめあがっていたほうが、バージョン管理、ネットワーク上の転送等に有利です。
こうした目的のために、Java では Java アーカイブ (JAR ファイル, *.jar)として、ひとつのファイルにパッケージすることができます。
jar コマンドによる JAR ファイルの作成
Eclipse のウィザードで JAR ファイルの作成を自動化する方法については「Eclipse での jar ファイルの作成とプログラムの実行」をみてください。
「Java のパッケージ」で作成したプログラムを例に取り、Java アーカイブを作成する方法を説明します。
この例ではプログラムが TestApp.class、Person.class の二つのバイトコードから構成されています。これを Java アーカイブ (*.jar ファイル) として、ひとつのファイルにまとめます。
JAR ファイルを作成するコマンドは jar コマンドです。
典型的なコマンドの使い方は次のようになります。
jar cfe TestApp.jar TestApp *.class ./mypackage/*.class
この結果、TestApp.jar が作成されます。
オプションの cf は「ファイルを作成 (create file)」の意味です。 作成するファイル名はその後に指定した TestApp.jar です。
cfe の e は「エントリーポイント (entry point) を指定する」というという意味です。エントリーポイントというのはプログラムの開始場所のことです。 Java アーカイブの中には複数の Java クラスを指定することが可能ですが、その中でプログラムの開始地点となるクラスの main 関数がエントリーポイントと呼ばれます。
エントリーポイントとなる main 関数を含むクラスはメインクラスと呼ばれます。メインクラスは jar ファイルの中に作成されるマニフェストファイル (MANIFEST.MF) に記録されます。
MANIFEST.MF は次のようなファイルです。
Manifest-Version: 1.0 Created-By: 11.0.5 (Amazon.com Inc.) Main-Class: TestApp
jar の最後のパラメータは jar ファイルに含む class ファイルのリストです。必要な class ファイルを複数選択できます。ワイルドカードとして *.class が使えます。
Java の JAR ファイルの実行
JAR ファイルを javaコマンドで実行するには、 -jar オプションを指定して次のようにします。
java -jar TestApp.jar
JAR ファイルを実行する方法について、詳しくは「JAR ファイルの実行方法」をみてください。