自己実行JAR内のメインマニフェスト属性の重要性

1概要

すべての実行可能なJavaクラスは main メソッドを含まなければなりません。簡単に言えば、このメソッドはアプリケーションの出発点です。

自己実行型JARファイルから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は私たちの主な目録属性を見つけることができませんでした。そのため、メインクラスにメインメソッドが含まれていることがわかりません。

適切なマニフェスト属性をコードと一緒にJARに含めましょう。単一行を含む 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つの単純な例でメインのマニフェスト属性の重要性を示しました。

例の完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/core-java[GitHubで利用可能]です。これはMavenベースのプロジェクトなので、インポートしてそのまま使用できます。