Jarファイルについて
★初めてJarファイルを作成するには
例えば
// Hello.java
class Hello
{
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
というソースをコンパイルしてJarにまとめたいとする
C:\> javac Hello.java
で Hello.class を生成して
C:\> jar cvfe Hello.jar Hello Hello.class
と指定すれば Hello.jar が作られる
指定パラメータは
c ... Jar新規作成
v ... 詳細の結果表示
f ... Jarファイル名指定
e ... メインクラス指定(MANIFEST.MFに書き込まれる)
Hello.jar ... 作成するJarファイル名
Hello ... メインクラス名
Hello.class ... Jarファイルに含めるファイル
★Jarファイルの中身を見るには
C:\> jar tvf Hello.jar
で Jarファイル内にあるファイル一覧が表示される
t ... 一覧表示
★Jarファイルから中身を取り出すには
C:\> jar xvf Hello.jar Hello.class
という感じにJarファイル内のパスを指定すればいい
x ... ファイル抽出
★Jarファイルの中身を更新するには
C:\> jar uvf Hello.jar Hello.class
と指定すればよい
u ... ファイル更新
★Jarファイルを実行するには
MANIFEST.MFにメインクラスが指定してあれば
C:\> java -jar Hello.jar
実行したいメインクラスを指定する場合
C:\> java -jar Hello.jar Hello
とすればよい
★あとからメインファイルの指定する場合
C:\> javac Hello.java
までは同じで次に
C:\> jar cvf Hello.jar Hello.class
とするとメインクラス未指定のJarファイルが出来上がるので
C:\> jar uvfe Hello.jar Hello
と指定すれば Hello がメインクラス名として指定されマニフェストファイルが更新される
★★★★★★★★★★
やり方未確認のこと
jar cvf Hello.jar classes
などとディレクトリ指定でファイルを追加した場合
メインクラスの指定方法が分からない
確認した
jar cvf Hello.jar classes
などとディレクトリ名を指定すると
ディレクトリ名=パッケージ名として扱われてしまうようだ
たとえば先ほどの例のHello.jaraに
package classes;
などとclassesという名前のパッケージに所属させればよいということになる
(だが普通はclassesというパッケージ名は作らない)
つまりディレクトリからディレクトリ名なしに取り込みたいとき
classesディレクトリにビルドしたclassデータをまとめてあるなら
次のように指定する(末尾にドットでの指定があることに注意)
・メインクラスを指定する場合
C:\> jar cvfe Hello.jar Hello -C classes .
・メインクラスを指定しない場合
C:\> jar cvf Hello.jar -C classes .
とすればいずれもclassesというパス名を含まずにファイル追加できる
-C ... 追加するファイルのあるディレクトリの指定
(jarコマンド内部でのファイル取り込み時のカレントディレクトリなのかな?)
. (ドット) ... 現在のディレクトリを示す。シェル上のエイリアスのようなもの
jarコマンドのヘルプには-Cでのディレクトリ指定の末尾にディレクトリ区切り記号が書いてあるのでそれを入れたほうがいいかもしれない
C:\> jar cvf Hello.jar -C classes/ .
C:\> jar cvf Hello.jar -C classes\ .
など