IntelliJを使用していますIDEA 12.1.3。モジュールが1つあり、指定された手順に従ってjarに変換しようとしています ここ 。jarを作成しましたファイルを作成し、jarファイルをD:/に移動しました。このjarを実行しようとすると、次のメッセージが表示されます。
Jarからメインクラスのマニフェスト属性を読み込めませんでした
Java -classpath jar com.code.TestCase
を使用して実行すると、完全に機能します。
なぜこれが起こるのですか? IntelliJIDEAを使用して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-Class
がjarファイルMANIFEST.MFに追加されていないのに、srcにMain-Class
があるのはなぜですか?
私は同じ問題を経験し、Intellijがマニフェストのパスに自動入力する方法に修正やバグを見つけました。
INTELLIJ UI
アーティファクトを作成してjarファイルを作成する場合、IntelliJは現在のマニフェストが配置されているパスに自動入力します。
つまり、アーティファクト作成ページでメインクラスを選択した後、Intellijは次のパス\ src\Java\META-INF\MANIFEST.MFを自動的に追加します。何らかの理由で、ビルドコマンドは前述のMANIFEST.MFファイルを取得しません。 Main-Class定義なしでゼロから作成するため、「Main-Classのロードに失敗しました」という結果になります。
IntelliJUIを使用してjarアーティファクトを作成する場合。自動入力パスを/$PROJECT_DIR/src/
に変更して削除し、[OK]をクリックします。
デフォルトでどのように見えるかの例:
これは、変更後の外観です。
正しい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でOSX10.9.2を使用しています
お役に立てば幸いです。
重要なルールの1つは、マニフェストファイルは改行またはキャリッジリターン文字で終了する必要があるということです。そこにない場合は、今すぐ追加してください。