usakdsteen

ゆうさくですてぃーん

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\ . など