自己実行型JARのメインマニフェスト属性の重要性
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ベースのプロジェクトであるため、そのままインポートして使用できます。