JAR (Java Archive)ファイルの作成

Java言語の長所は、一度コンパイルしたクラスが、多くのOS(Windows, Mac OS X, Linuxなど)で動作することです。これは、Java Virtual Machine (JVM)と呼ばれる仮想機械上で、Javaのコードが実行されるためです。JVMの実装は、OS毎に異なっていますが、これはOS間の違いなどをJVM側で吸収して、プログラマがOSの違いを意識せずコードを書けるようにするための配慮です。

Perl, Rubyなどのスクリプト言語も様々な環境で動作しますが、これらの言語は事前のコンパイル無しに、実行時にソースコードを解析してプログラムを実行するので、必ずしも高速ではありません。一方、C言語、C++言語で書かれたプログラムは、各OSで直接実行できるバイナリファイル(実行ファイル .exe, a.outなど)にコンパイルして実行するので高速ですが、OS間での互換性がほとんどありません。

高速、かつ portability (移動のしやすさ)を兼ね備えた言語は2008年現在のところ、Javaのみです。Javaでは通常、コンパイル後に複数のクラスファイル(.class)が作成されるので、これらを持ち運びしやすいように1つにまとめたものが、JAR (Java ARchive 書庫)ファイルです。JARファイルは、jarコマンドを用いて作成することができます。

作成されたJARファイルは、様々なOSで実行させることができますので、自分で作成したプログラムを人に使ってもらうときに役立ちます。また、他のマシンでプログラムを実行するときにも、jarファイルをコピーするだけで実行できるので便利です。

ライブラリ用(他のプロジェクトで自分のコードを再利用するため)のJARフィルを作成する

カレントフォルダにあるすべてのクラスファイルをまとめて、hello-world.jar (JARファイル)を作成する:

> jar -cvf hello-world.jar *.class

main(String[] args)を実行できるJARファイルを作成する

たくさんあるクラスファイル中のどのmain関数を実行するかを指定するために、マニフェストファイルが必要です。

helloworld.mf (hello worldを実行するためのマニフェストファイル. 拡張子は.mf)

Manifest-Version: 1.0
Main-Class: HelloWorld

HelloWorld.classを含むJarファイルの作成

> jar -cvf hello-world-bin.jar helloworld.mf HelloWorld.class

hello-world-bin.jarが作成される。

マニフェストを含むJARファイルからプログラムを実行する

> java -jar hello-world-bin.jar 
Hello World!

EclipseからJarを作成する

普段はEclipseからJARを作成する方が間違いが少ないでしょう。

プロジェクトで右クリック - Exportを選択

JAR fileを選択

JARに含めるプロジェクトを選択。レポート用のJARにはソースコードを含めたいので、Export Java source files and resoucesを必ずチェックすること。また、JARのファイル名を入力して、Nextをクリック。

あとで同じ設定でJARを作りなおしたい場合は、以下をチェックしてファイルを保存しておく。

特定の、mainメソッドを実行できるようにするためには以下で実行させたいmainを含むクラスを選択すると良い。

Finishを押すとJARファイルが作成される。

JARファイルの内容の確認

jarのtオプションを使います。

leo@raquel~/java> jar tvf genome-sequence.jar
    25 Wed Aug 06 04:39:04 JST 2008 META-INF/MANIFEST.MF
  1178 Wed Aug 06 04:08:36 JST 2008 GenomeSequence.class
   878 Wed Aug 06 04:08:36 JST 2008 GenomeSequence.java
   276 Wed Aug 06 03:26:06 JST 2008 SequenceContainer.class
    44 Wed Aug 06 03:26:06 JST 2008 SequenceContainer.java
  1131 Wed Aug 06 04:38:56 JST 2008 GenomeSequenceTest.class
   670 Wed Aug 06 04:38:56 JST 2008 GenomeSequenceTest.java
   353 Wed Aug 06 01:00:46 JST 2008 .classpath
   384 Wed Aug 06 00:50:00 JST 2008 .project
  1044 Wed Aug 06 04:27:00 JST 2008 genome-sequence.jardesc

レポート用のJARを作成する場合は、class, javaの両方が入っていることを確認してください。

Runnable Jar

Eclipse3.4から、Runnable JAR(あるmainから実行できるようにManifestを自動で作成し、外部ライブラリのクラスファイルもJARの中に同梱する)を手早く作成できるようになりました。ただし、ソースコードが含まれないJARができてしまうので、レポート送信のときには、面倒でも上にあげた方法で、ソースコード同梱のJARを作成してください。

テストコードを含むJARファイルからJUnitを実行

カレント(現在居る)ディレクトリに、junitのJARファイル(junit-4.1.jarなど)と、今作ったJARファイルがある状態で、以下のようにコマンドを実行する。

> java -cp ".;junit-4.1.jar;genome-sequence.jar" org.junit.runner.JUnitCore GenomeSequenceTest
JUnit version 4.1
....
Time: 0.033

OK (4 tests)

これで、GenomeSequenceTestが実行されて結果が表示された。