20

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

java -jar fileName.jar

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

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

どうしたの?

4

6 に答える 6

10

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

  • それは下にあるべきです/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

これらのタイプの問題は些細なことですが、ファイルの内容と場所が正しいことを確認してください。

于 2012-09-04T15:52:07.413 に答える
4

これをコマンドラインに使用できます:

java -cp jarFileName.jar full.package.className

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

于 2013-03-06T17:58:33.933 に答える
1

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

于 2015-12-10T15:05:46.370 に答える
0

私は、Netbeans 8.0 と「Java アプリケーション」プロジェクト プロトタイプ用の組み込み Maven プロジェクトでこの問題を抱えています。また、私は Maven 3 を持っていますが、Web 上のいくつかの提案が、Netbeans で使用される Maven コードと一致しないこともわかりました。

とにかく、JAR ファイルを使用してメインクラスを実行し、依存ライブラリを埋め込むための簡単なレシピを次に示します。サブプロジェクト JAR で動作することがわかったプロジェクトの他のプロジェクト POM ファイルを比較して、この作業を行いました。Mavenの知識が豊富な人が gottcha を見つけた場合は、話してください。また、コンテキストを提供するために、いくつかの通常のものを残しました。例は次のとおりです。

     <properties>
         <packageName>trials.example</packageName>
         <mainClass>${packageName}.CmdApp</mainClass>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

         <slf4jVersion>1.7.7</slf4jVersion>
         <log4jVersion>1.2.17</log4jVersion>

         <maven.compiler.source>1.8</maven.compiler.source>
         <maven.compiler.target>1.8</maven.compiler.target>
     </properties>

このセクションでは、プロジェクトについて Maven に伝えます。

  • packageName ... メインクラスの Java パッケージです
  • mainClass ..... main() メソッドを持つクラスの完全修飾名。

これらは maven-jar-plugin で使用されていることがわかります。

組み込みのサンプル プロトタイプが実行しなかったもう 1 つのことは、コマンド ラインから実行できるようにサブプロジェクトを JAR にパッケージ化することでした。これは、以下の maven-dependency-plugin で行われます。興味深いのは、システム関連のものをパッケージ化する必要がなく、依存クラスを JAR にラップする必要があるところです。

これらは次のように使用されます。

     <build>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-dependency-plugin</artifactId>
                 <version>2.6</version>
                 <executions>
                     <execution>
                         <id>unpack-dependencies</id>
                         <phase>package</phase>
                         <goals>
                             <goal>unpack-dependencies</goal>
                         </goals>
                         <configuration>
                             <excludeScope>system</excludeScope>
                             <outputDirectory>${project.build.directory}/classes</outputDirectory>
                         </configuration>
                     </execution>
                 </executions>
             </plugin>

             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-jar-plugin</artifactId>
                 <version>2.5</version>
                 <configuration>
                     <useDefaultManifestFile>true</useDefaultManifestFile>
                     <archive>
                         <manifest>
                             <mainClass>${mainClass}</mainClass>
                             <packageName>${packageName}</packageName>
                             <addClasspath>true</addClasspath>
                             <classpathPrefix>classes/</classpathPrefix>
                         </manifest>
                         <manifestEntries>
                            <mode>development</mode>
                            <url>${pom.url}</url>
                         </manifestEntries>
                     </archive>
                 </configuration>
             </plugin>

          </plugins>
    </build>

それを実現するための数時間のチェックとテストを節約できることを願っています. 乾杯、ウィル。

于 2014-09-01T04:34:22.173 に答える