web-dev-qa-db-ja.com

----。jar Netbeansの「メインマニフェスト属性なし」

最近、JavaでMavenをいじり始めました。プロジェクトをテストする時が来ました。NetBeansウィンドウで問題なく動作し、App.Java(com.MyCompany.App)にあるメインクラスを実行していますが、コマンドラインから実行しようとするとエラーが発生します。

Java -jar fileName.jar

fileName.jarの「メインマニフェスト属性なし」

Mainが何であるかを指定するmanifest.mfファイルを追加しようとしましたが、プロジェクトのプロパティにもアクセスして、メインファイルとして追加しました...

どうしたの?

18
A_Elric

マニフェストファイルに問題があることを願っています。基本的なチェックによって問題が解決する場合があります。

  • /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を実行できます。

これらのタイプの問題は些細なことですが、多くの時間を費やします。ファイルのコンテンツと場所が正しいことを確認してください。

10
RP-

私はこれが古い質問であることを知っていますが、誰かを助けるために。

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は、パッケージ階層から始まります。

13
yshehab

これをコマンドラインに使用するだけです:

Java -cp jarFileName.jar full.package.className

この場合、マニフェストファイルの詳細を調べる必要はありません。

3
rachel

プロジェクトのプロパティダイアログ(プロジェクトタブから、プロジェクトを右クリックしてプロパティを選択)を見ると、[カテゴリ]ウィンドウに[実行]アイテムがあることがわかります。それをクリックすると、jarのメインクラスを指定できるダイアログが表示されます。その情報は最終的にマニフェストに含まれます。

1
Ralph LeVan

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
0
Rozhkov Eugene