最近、JavaでMavenをいじり始めました。プロジェクトをテストする時が来ました。NetBeansウィンドウで問題なく動作し、App.Java(com.MyCompany.App)にあるメインクラスを実行していますが、コマンドラインから実行しようとするとエラーが発生します。
Java -jar fileName.jar
fileName.jarの「メインマニフェスト属性なし」
Mainが何であるかを指定するmanifest.mfファイルを追加しようとしましたが、プロジェクトのプロパティにもアクセスして、メインファイルとして追加しました...
どうしたの?
マニフェストファイルに問題があることを願っています。基本的なチェックによって問題が解決する場合があります。
/META-INF/MANIFEST.MF
の下にある必要がありますMain-Class:com.MyCompany.App
が必要ですIDEを使用している場合は、プロジェクトをrunnable jar
としてエクスポートするオプションが必要です。これを利用して、IDEが適切なマニフェストを処理するようにできます。
コマンドラインjar cfm filename.jar Manifest.txt com/MyCompany/*.class
から、以下の内容のマニフェストファイルを生成します
Manifest-Version: 1.0
Created-By: 1.6.0 (Sun Microsystems Inc.)
Main-Class: com.MyCompany.App
そして、jarコマンドJava -jar fileName.jar
を実行できます。
これらのタイプの問題は些細なことですが、多くの時間を費やします。ファイルのコンテンツと場所が正しいことを確認してください。
私はこれが古い質問であることを知っていますが、誰かを助けるために。
Maven-jar-pluginが必要です( Mavenの例 を参照)。このプラグインは、プロジェクトのビルド時にRpがマニフェストファイルに記述した必要なエントリを作成します。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
バージョンが必要です。それ以外の場合、プロジェクトはビルドされません。 fully.qualified.MainClassは、パッケージ階層から始まります。
これをコマンドラインに使用するだけです:
Java -cp jarFileName.jar full.package.className
この場合、マニフェストファイルの詳細を調べる必要はありません。
プロジェクトのプロパティダイアログ(プロジェクトタブから、プロジェクトを右クリックしてプロパティを選択)を見ると、[カテゴリ]ウィンドウに[実行]アイテムがあることがわかります。それをクリックすると、jarのメインクラスを指定できるダイアログが表示されます。その情報は最終的にマニフェストに含まれます。
JARツールでエントリポイントを設定する:
'e'フラグ( 'entrypoint'用)は、マニフェストのMain-Class属性を作成またはオーバーライドします。 JARファイルの作成または更新中に使用できます。これを使用して、マニフェストファイルを編集または作成せずにアプリケーションのエントリポイントを指定します。たとえば、次のコマンドは、マニフェストのMain-Class属性値がMyAppに設定されているapp.jarを作成します。
jar cfe app.jar MyApp MyApp.class
次のコマンドを実行して、このアプリケーションを直接呼び出すことができます。
Java -jar app.jar
エントリポイントクラス名がパッケージ内にある場合は、「。」を使用できます。区切り文字としての(ドット)文字。たとえば、Main.classがfooというパッケージにある場合、エントリポイントは次の方法で指定できます。
jar cfe Main.jar foo.Main foo/Main.class