15

IntelliJ IDEA 12.1.3 を使用しています。モジュールが 1 つあり、ここに記載されている手順に従って、それを jar に変換しようとしています。jar ファイルをビルドし、jar ファイルを D:/ に移動しました。この jar を実行しようとすると、次のメッセージが表示されます。

jar から Main-Class マニフェスト属性を読み込めませんでした

を使用して実行すると、java -classpath jar com.code.TestCase完全に機能します。

なぜこれが起こるのですか?IntelliJ IDEA を使用して jar を作成しました。そのjarには、追加したすべての外部ライブラリのすべてのコードが含まれています。

src マニフェスト ファイル内:

Manifest-Version: 1.0
Main-Class: com.code.TestCase

ただし、jar のマニフェスト ファイルの内容は次のとおりです。

Manifest-Version: 1.0
Build-Jdk: 1.6.0
Built-By: ubuntu
Created-By: Apache Maven
Archiver-Version: Plexus Archiver

Name: org.apache.log4j
Implementation-Vendor: "Apache Software Foundation"
Implementation-Title: log4j
Implementation-Version: 1.2.15

Main-Classjar ファイル MANIFEST.MF に追加されていないのにMain-Class、srcには追加されているのはなぜですか?

4

3 に答える 3

54

同じ問題が発生し、Intellij がマニフェストのパスを自動入力する方法に修正やバグが見つかりました。

INTELLIJ UI

jar ファイルを作成するためのアーティファクトを作成するとき、IntelliJ は現在のマニフェストが配置されているパスを自動入力します。

つまり、アーティファクト作成ページで Main-Class を選択すると、Intellij は次のパス \src\java\META-INF\MANIFEST.MF を自動的に追加します。何らかの理由で、ビルド コマンドは前述の MANIFEST.MF ファイルを取得しません。「メインクラスの読み込みに失敗しました」という結果になるメインクラス定義なしでゼロから作成します

IntelliJ UI を使用して jar アーティファクトを作成する場合。に変更して自動入力パスを削除し/$PROJECT_DIR/src/、[OK] をクリックします。

デフォルトでどのように見えるかの例:

デフォルトの intellij jar アーティファクト設定

変更後は次のようになります。

intellij アーティファクトの設定を修正

正しい MANIFEST.MF ファイルを入力するための手動修正

IntelliJ プロジェクトで、.idea\artifacts\_jar.xml を開きます。

含まれていることを確認してください

  <element id="directory" name="META-INF">
    <element id="file-copy" path="$PROJECT_DIR$/src/META-INF/MANIFEST.MF" />
  </element>

これを行ったら、intelliJ をリロードして、.xml ファイルへの変更を取得する必要がある場合があります。

私にとっては、別の構造が存在する Maven プロジェクト (つまり、src/main/java/..) で発生しました。

IntelliJ バージョン 12.1.6 で OSX 10.9.2 を使用しています

それが役立つことを願っています。

于 2014-04-17T20:06:03.593 に答える
0

このブログがお役に立てば幸いです。

http://javarevisited.blogspot.in/2013/01/how-to-fix-failed-to-load-main-class-manifest-attribute-jar-java-eclipse.html

于 2013-06-10T13:22:38.983 に答える
0

重要な規則の 1 つは、マニフェスト ファイルは改行またはキャリッジ リターン文字で終了する必要があるということです。そこにない場合は、今すぐ追加してください。

于 2013-06-10T13:17:52.073 に答える