1. 概要

すべての実行可能Javaクラスには、mainメソッドが含まれている必要があります。 簡単に言えば、このメソッドはアプリケーションの開始点です。

自己実行型JARファイルからmainメソッドを実行するには、適切なマニフェストファイルを作成し、コードと一緒にパックする必要があります。 このマニフェストファイルには、mainメソッドを含むクラスへのパスを定義するmainマニフェスト属性が必要です。

このチュートリアルでは、単純なJavaクラスを自己実行型JARとしてパックする方法を示し、実行を成功させるためのメインマニフェスト属性の重要性を示します。

2. メインマニフェスト属性なしでJARを実行する

より実用的にするために、適切なマニフェスト属性なしで失敗した実行の例を示します。

mainメソッドを使用して単純なJavaクラスを作成しましょう。

public class AppExample {
    public static void main(String[] args){
        System.out.println("AppExample executed!");
    }
}

サンプルクラスをJARアーカイブにパックするには、オペレーティングシステムのシェルに移動してコンパイルする必要があります。

javac -d . AppExample.java

次に、それをJARにパックできます。

jar cvf example.jar com/baeldung/manifest/AppExample.class

example.jar には、デフォルトのマニフェストファイルが含まれます。 これで、JARの実行を試みることができます。

java -jar example.jar

実行はエラーで失敗します:

no main manifest attribute, in example.jar

3. メインマニフェスト属性を使用したJARの実行

これまで見てきたように、JVMはメインのマニフェスト属性を見つけることができませんでした。 そのため、mainメソッドを含むmainクラスが見つかりませんでした。

コードとともに適切なマニフェスト属性をJARに含めましょう。 1行を含むMANIFEST.MFファイルを作成する必要があります。

Main-Class: com.baeldung.manifest.AppExample

マニフェストには、コンパイルされたAppExample.classへのクラスパスが含まれています。 すでにサンプルクラスをコンパイルしているので、再度コンパイルする必要はありません。

マニフェストファイルと一緒にパックします。

jar cvmf MANIFEST.MF example.jar com/baeldung/manifest/AppExample.class

今回、JARは期待どおりに実行され、以下を出力します。

AppExample executed!

4. 結論

この簡単な記事では、単純なJavaクラスを自己実行型JARとしてパックする方法を示し、2つの単純な例でメインマニフェスト属性の重要性を示しました。

この例の完全なソースコードは、GitHubから入手できます。 これはMavenベースのプロジェクトであるため、そのままインポートして使用できます。