アーカイブファイルでまとめて配布

プログラムの配布

javaのプログラムを配布するときには、classファイルを配布するのが普通でしょう。.javaのソースファイルではもらった人がコンパイルしなければなりません。

TwoButtonsの様にclassファイルがひとつの時にはTwoButtons.classファイルだけで良いのですが、SanTakuFはSanTakuF.classの他にMondaishuu.classとToi.classが必要です。

このようなときはファイルをアーカイブファイルでまとめて配布するのが便利です。アーカイブは元々公文書などの記録を保管しておく場所のことですが、コンピュータ関係で保存や配布のために複数のファイルをまとめてファイルにしたものを言います。最近は書庫と訳されています。特にjavaで使われるjarという書庫を扱うソフトは書庫のままjavaのプログラムとして実行できるので便利です。

jarファイルの作り方

例としてSanTakuF.javaについてやってみます。

(1)次の内容のテキストファイルを作り、適当なファイル名で保存します。この例ではSanTaku.txtとしました。このファイルをマニフェストファイルと呼びます。このファイルは書庫のままjavaのプログラムとして実行するときにどのファイルにmainがあるかを示すために加えます。

ファイル名 SanTakuF.txt

Main-Class: SanTakuF

SanTakuFというクラスに実行するmainがあることを示しています。いままで 「 java クラス名 」 で実行していたクラス名を書けば良いのです。

(2)jarコマンドで次のように命令します。

$ jar cvfm SanTakuF.jar SanTakuF.txt SanTakuF.class Mondaishuu.class Toi.class

次のような意味です。

cvfm
オプション
c:新規に作成する
v:逐次報告をする 指定しないと黙って仕事をします
f:jarファイル名の指定をする(正確には指定する名前のファイルに書き出す)
m:マニフェストファイルの指定をする
SanTakuF.jar
作成するjarファイル名
SanTakuF.txt
マニフェストファイル名 (1)でつけた名前とあわせます
SanTakuF.class Mondaishuu.class Toi.class
使用するclassファイルのリスト

以下のように表示され SanTakuF.jar というファイルができます。

$ jar cvfm SanTakuF.jar SanTakuF.txt SanTakuF.class Mondaishuu.class Toi.class
マニフェストが追加されました。
SanTakuF.class を追加中です。(入 = 4170) (出 = 2293)(45% 収縮されました)
Mondaishuu.class を追加中です。(入 = 2023) (出 = 1251)(38% 収縮されました)
Toi.class を追加中です。(入 = 286) (出 = 212)(25% 収縮されました)
$

(3)SanTakuF.jarができます。

しくみ

jarというのはもともとファイルを圧縮してまとめる「アーカイブソフト」のひとつです。

$ jar cvf matome file01 file02 file03 …

これで matome というファイルに、file01 file02 file03 … が圧縮されてひとまとめにされます。

中身を調べるには、

$ jar tvf matome

解凍して元に戻すには

$ jar xvf matome

中身を調べるにはGUIでもできます。右クリックして「書庫マネージャーで開く」を選びます。

SanTakuF.class Mondaishuu.class Toi.class が格納されています。

マニフェストファイルSanTakuF.txtが見当たりません。マニフェストファイルはそのまままとめられるのではなく、その内容を読み込んで、META-INF/MANIFEST.MF というファイルの中に書き加えられているのです。

ダブルクリックで実行

右クリックのメニューで一番上にあるものが、ダブルクリックで実行される機能です。現在「書庫マネージャーで開く」になっています。

これを変更するには「プロパティ」を選択します

「開き方」のページを開いて「Sun java 6 Runtime」を選択すると java で開かれる、つまりjavaのプログラムとして実行されることになります。

ダブルクリックして確かめてください。

jarファイルがどこにあってもダブルクリックで実行するとカレントディレクトリがユーザーホームになるので、ファイル選択はユーザーホームからスタートします。

jarを.desktopにする

SanTakuF.classだけでなくSanTakuF.jarもそれを起動するランチャを作ることができます。

SanTakuF.jarはランチャがなくてもダブルクリックで実行できますが、アイコンは段ボール箱ですのでランチャを作って好みのアイコンを指定する方が嬉しいでしょう。

デスクトップで右クリックして「ランチャの生成」を選ぶ。

ダイアログの中に必要なものを入力する

今回の例は、javaというフォルダの中のSanTakuF.jarというjarになったjavaプログラムを実行するものです。

種類
アプリケーションのままにする
名前
好みの名前をつけて良い。アイコンの下に表示される
コマンド
java -jar java/SanTakuF.jar
と入力する。今回は「参照」から選択したままではだめ
またjarにする前のclassファイルの時とも異なる
コメント
短い説明文を入れる
アイコンを選択できる。今回はdebianに用意されているgdu-emblem-raid3.svgを使った。別のもののために用意されているものだが無断で流用。こういった画像にも著作権はあるが今回は配布するわけではないので問題はない。

[OK]でデスクトップにランチャができます。ダブルクリックでSanTakuF.jarが起動します。

やはりカレントディレクトリがユーザーホームになるので、ファイル選択はユーザーホームからスタートします。

Windowsでは

Windowsではjarは書庫と考えられていないので、javaを導入すれば専用のソフトとして関連付けられますから、Linux上より迷うことはありません。

できたjarファイルもOSの違いを超えてダブルクリックで実行できるはずです。

ただ、.desktopファイルはWindowsとは異なります。Windowsで.desktopに近い機能を持つものはショートカットです。

課題

1.

上記 SanTakuF.jar をつくり、実行してみなさい


Javaプログラミング
聖愛中学高等学校
http://www.seiai.ed.jp/
Dec.2003
Feb.2009
Oct.2011
Sep.2012