マニフェストを指定したJARファイル作成方法:How to create JAR file specifying manifest
JavaのJARファイルは、複数のクラスファイルやリソースをひとまとめにした圧縮形式のアーカイブファイルです。マニフェストファイル(MANIFEST.MF)を指定することで、JARファイルにさまざまなメタデータを追加することができます。特に、実行可能JARファイルを作成する際には、マニフェストにエントリーポイントを指定する必要があります。
マニフェストファイルとは
マニフェストファイルはJARファイル内に格納される特殊なファイルで、JARファイルのメタデータを記述します。通常、META-INF
ディレクトリ内にMANIFEST.MF
という名前で保存されます。
マニフェストファイルの例:
Manifest-Version: 1.0
Main-Class: com.example.MainClass
Class-Path: lib/library1.jar lib/library2.jar
上記のマニフェストでは、以下の情報が記述されています:
- Manifest-Version: マニフェストのバージョン。
- Main-Class: JARファイルのエントリーポイントとなるクラス(実行するクラス)。
- Class-Path: 依存する外部ライブラリのパス。
マニフェストを指定したJARファイルの作成手順
1. Javaソースファイルの作成
まず、簡単なJavaプログラムを作成します。
例:MainClass.java
package com.example;
public class MainClass {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
2. コンパイル
Javaソースファイルをコンパイルしてクラスファイルを生成します。
javac -d . MainClass.java
このコマンドを実行すると、com/example/MainClass.class
が生成されます。
3. マニフェストファイルの作成
エントリーポイントを指定するためのマニフェストファイルを作成します。
例:manifest.mf
Manifest-Version: 1.0
Main-Class: com.example.MainClass
注意:マニフェストファイルの各行の末尾には改行が必要です。最後の行にも必ず改行を入れてください。
4. JARファイルの作成
マニフェストファイルを指定してJARファイルを作成します。
jar cfm HelloWorld.jar manifest.mf com/example/MainClass.class
コマンドの説明:
- c: JARファイルを作成する(create)。
- f: 出力するJARファイルの名前を指定する(file)。
- m: マニフェストファイルを指定する(manifest)。
5. 実行可能JARファイルの実行
作成したJARファイルを実行します。
java -jar HelloWorld.jar
出力結果:
Hello, World!
クラスパスを指定したJARファイルの作成
外部ライブラリを含む場合、マニフェストファイルにクラスパスを指定します。
例:manifest.mf
Manifest-Version: 1.0
Main-Class: com.example.MainClass
Class-Path: lib/library1.jar lib/library2.jar
ディレクトリ構成の例
project/
│-- com/
│ └── example/
│ └── MainClass.class
│-- lib/
│ ├── library1.jar
│ └── library2.jar
└── manifest.mf
JARファイルの作成コマンド
jar cfm MyApp.jar manifest.mf com/example/MainClass.class
JARファイルの実行
java -jar MyApp.jar
マニフェストファイルでよく使われる属性
- Manifest-Version: マニフェストのバージョン。
- Main-Class: 実行時のエントリーポイントクラス。
- Class-Path: クラスパスを指定。
- Created-By: JDKのバージョンや作成者情報。
- Sealed: JARファイル全体をシールする(クラスがJAR内でしかロードされないようにする)。
エラーとその対処法
エラー: no main manifest attribute
JARファイルを実行した際にこのエラーが発生する場合、マニフェストにMain-Class
が正しく指定されていません。
解決法: マニフェストファイルに正しいエントリーポイントを指定します。
エラー: クラスパス関連のエラー
外部ライブラリが見つからない場合、Class-Path
が正しく設定されていない可能性があります。
解決法: マニフェストファイルでライブラリのパスを正しく指定します。
まとめ
マニフェストファイルを指定することで、JARファイルのメタデータやエントリーポイントを管理できます。特に実行可能JARファイルを作成する際にはMain-Class
の指定が重要です。クラスパスの指定によって外部ライブラリも統合できるため、複数の依存関係を持つアプリケーションにも対応できます。