web-dev-qa-db-ja.com

IntelliJで実行可能jarを作成しますIDEA

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があるのはなぜですか?

14
muthu

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

INTELLIJ UI

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

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

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

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

default intellij jar artifact settings

これは、変更後の外観です。

fixed intellij artifact settings

正しい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を使用しています

お役に立てば幸いです。

51
Dan

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

0
Juned Ahsan
0
Arun Kumar