kengo92iの日記

プログラミングとかやったことの記録を書いていきます。

jarファイルの作り方 ~MacOSX~

MacOSXでjarファイルを作る時のメモ書きです。

jarファイルを作り方がわからない場合や、動かない場合などに参考にして下さい。
MacOSXでのjarファイルの作り方と良くあるミスを解説していきます。


jarファイルを作るために、先ずは適当なjavaプログラムを作ります。

Main.java

import java.util.Scanner;

public class Main
{
	public Main(){
		//Do Nothing...
	}

	public static void main(String[] args)
	{
		Scanner aScanner = new Scanner(System.in);
		System.out.print("Enter something >> ");
		String msg = aScanner.nextLine();
		System.out.println("msg = " + msg);
	}
}

準備ができたら、一度実行してみます。

$ javac Main.java 
$ java Main
Enter something >> Hello World!!
msg = Hello World!!

ここまでで、下準備は終わりです。
今から実際にjarファイルを作って行きます。

jarコマンドをターミナルから実行し、jarファイルを実行してみると以下のようになると思います。

$ jar cvf sample.jar *.class
マニフェストが追加されました
Main.classを追加中です(入=773)(出=474)(38%収縮されました)
$ java -jar sample.jar 
sample.jarにメイン・マニフェスト属性がありません

「sample.jarにメイン・マニフェスト属性がありません」という出力されてうまく行かないはずです。これはjarファイル内のMANIFEST.MFにMain-Class指定というのがないからです。

なので、今からMANIFEST.MFにMain-Class指定を追加します。以下のファイルを作成して下さい

SAMPLE.MF

Main-Class: Main

この時に、最終行は必ず改行を入れて下さい。そうじゃないと動きません。
また。Main-Class:の後にスペースを1つ入れないとこれも動かなくなります。

Main-Class: Main ○
Main-Class:Main  ×

ファイルが作成出来たら、このSAMPLE.MFの設定をjarファイル作成の時に組み込みます。
cvfmとオプションを付けているので、jarファイル名 マニフェストファイル まとめるファイルの順に指定して下さい。

jarファイルが実行出来るようになると思います。以下が実行結果です。

$ jar cvfm sample.jar SAMPLE.MF *.class 
マニフェストが追加されました
Main.classを追加中です(入=773)(出=474)(38%収縮されました)
$ java -jar sample.jar 
Enter something >> Hello World!!
msg = Hello World!!

以上です。