マニフェストを指定したJARファイル作成方法:How to create JAR file specifying manifest

マニフェストを指定した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の指定が重要です。クラスパスの指定によって外部ライブラリも統合できるため、複数の依存関係を持つアプリケーションにも対応できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です