プログラミング > Java > Jarの作り方

★初めてJarファイルを作成するには

例えば

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

など
最終更新:2014年11月04日 05:38