ワープロや表計算などWindowsで普通に使用されているプログラムはC言語(C++)で書かれ、Cのコンパイラでコンピュータが直接実行できる形になおされています。Javaのコンパイラ(javac)はクラスファイルを作りますがこれは実行形式でなくjavaが.classの内容を読み込んで実行しています。
Cプログラム →コンパイラ→ 実行ファイル Javaプログラム →コンパイラ(javac)→ クラスファイル(.class) →インタープリタ(javaこれは実行ファイル)が読み込んで実行
また、実行にあたり端末からコマンドをキーボードで打たなければならないのもGUIの流れに反しています。(コマンド方式の操作も慣れると使いやすいのですが、Windowを利用するソフトがコマンドから起動されるのはちょっと…)
注 Linuxでは,jarファイルがアーカイブとしてすでに位置づけられているために,うまくいかない可能性があります。
一般の実行ファイルと同様の使用感を持たせることができます。例としてSanTaku.javaについてやってみます。
(1)SanTaku.javaをコンパイルすると、SanTaku.class ができます。この他にSanTaku.javaの実行にはMondaishuu.classとToi.classが必要です。この3つを(2)のマニフェストファイルと一緒にまとめます。
(2)次の内容のテキストファイルを作り、適当なファイル名で保存します。この例ではSanTaku.txtとしました。このファイルをマニフェストファイルと呼びます。
Main-Class: SanTaku
この中の SanTakuは実行するmainを含むクラス名です。いままで 「 java クラス名 」 で実行していたクラス名を書きます。
最後は必ず改行します。
(3)jarコマンドで次のように命令します。
$ jar cvfm SanTaku.jar SanTaku.txt SanTaku.class Mondaishuu.class Toi.class
次のような意味です。
以下のように表示され SanTaku.jar というファイルができます。
$ jar cvfm SanTaku.jar SanTaku.txt SanTaku.class Mondaishuu.class Toi.class マニフェストが追加されました。 SanTaku.class を追加中です。(入 = 3512) (出 = 1899)(45% 収縮されました) Mondaishuu.class を追加中です。(入 = 1918) (出 = 1178)(38% 収縮されました) Toi.class を追加中です。(入 = 286) (出 = 214)(25% 収縮されました) $
(4)SanTaku.jarをダブルクリックすると実行できます。
jarというのはもともとファイルを圧縮してまとめる「アーカイブソフト」のひとつです。
$ jar cvf matome file01 file02 file03 …
これで matome というファイルに、file01 file02 file03 … が圧縮されてひとまとめにされます。
中身を調べるには、
$ jar tvf matome
解凍して元に戻すには
$ jar xvf matome
この中にマニフェストファイルがあります。 META-INF/MANIFEST.MF ここに実行すべきクラス名を書いておくのが、マニフェストファイル名の指定です。このファイルはそのまままとめられるのではなく、その内容を読み込んで、META-INF/MANIFEST.MF というファイルの中に書き加えられるのです。
Java 2 SDK, Standard Edition(JavaSDK)または、JREと呼ばれる実行環境がインストールされていないと実行できません。