Javaでは、マニフェストファイルを使用して、アプリケーションのエントリポイントを定義し、JARファイルのクラスパスまたはパッケージバージョンを追加できます。この短いチュートリアルでは、カスタムマニフェストファイルをJarファイルに追加する方法を説明します。

1.プロジェクトの構成

これがプロジェクトのフォルダ構造であると仮定します

…​./workspace/test/classes/com/mkyong/awt/AwtExample.class/workspace/test/classes/manifest.txt

===  2. Jar It

以下のコマンドを使用してJarファイルを作成し、カスタムマニフェストファイル(manifest.txt)を追加します。

jar -cvfm example.jar manifest.txt com/mkyong/awt/** .class

__出力__

$ jar -cvfm example.jar manifest.txt com/mkyong/awt/** .class
added manifest
adding: com/mkyong/awt/AwtExample$1.class(in = 638) (out= 388)(deflated 39%)
adding: com/mkyong/awt/AwtExample.class(in = 879) (out= 540)(deflated 38%)
mkyong@laptop:~/workspace/JavaTips/bin$

===  3.完了

カスタムマニフェストファイルを持つ新しい "example.jar" jarファイル。

$ jar tf example.jar
META-INF/META-INF/MANIFEST.MF
com/mkyong/awt/AwtExample$1.class
com/mkyong/awt/AwtExample.class
mkyong@laptop:~/workspace/JavaTips/bin$

=== 説明

オプション "m"は、カスタムマニフェストファイルを含むことを意味します。オプションの順序については常に注意が必要です。文字 "m"と "f"は、 "manifest"と "jarfile"が出現するのと同じ順序で現れなければなりません。

たとえば、**  Correct statement **  "fm"は "example.jar manifest.txt"と一致する必要があります。

jar -cvfm example.jar manifest.txt com/mkyong/awt/** .class

"mf"は "manifest.txt example.jar"と一致する必要があります

jar -cvmf manifest.txt example.jar com/mkyong/awt/** .class

** 間違った声明**

jar -cvfm manifest.txt example.jar com/mkyong/awt/** .class

これはうまくいかず、システムはマニフェストファイルを "example.jar"として扱い、 "invalid header field"エラーを引き起こします。

=== リファレンス

.  http://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html[Manifest

ファイルリファレンスガイド]

link://tag/jar/[jar]link://タグ/java/[java]リンク://タグ/マニフェスト/[マニフェスト]