JARファイルからメインクラスのマニフェスト属性を読み込めなかったのはなぜですか?


85

この方法でJARファイルを作成しましたjar cf jar-file input-files。今、私はそれを実行しようとしています。実行しても機能しません(jreコマンドが見つかりません):

jre -cp app.jar MainClass

これも機能しません:

java -jar main.jar

(main.jarからMain-Classマニフェスト属性をロードできませんでした)。

私もそれを知りました

JARファイルとしてパッケージ化されたアプリケーションを実行するには(バージョン1.2-Main-Classマニフェストヘッダーが必要)

「メインクラスのマニフェストヘッダー」とは何ですか?どうすれば作成でき、どこに置くことができますか?

回答:


62

私はあなたの症状を信じているかどうかわかりません:

  • jreコマンドが見つからない場合は、実行しますjre -cp app.jarすると同じエラーが発生はずです
  • JARファイルをクラスパスに追加するだけでは、表示されているエラーは発生しません。

次のコマンドを実行すると、このエラーが表示されると思います。

java -jar app.jar

Main-Classヘッダーは、JARファイルのマニフェストに含まれている必要があります。これは、他の必要なライブラリなどに関するメタデータです。適切なマニフェストを作成する方法については、Sunのドキュメントを参照してください。基本的に、次のような行を含むテキストファイルを作成する必要があります。

Main-Class: MainClass

次に実行します

jar cfm app.jar manifest.txt *.class

ありがとうございました。できます。でマニフェストファイルを作成してMain-Class: MainClassから、指定したコマンドで.jarファイルを作成しました。その後、プログラムを実行することができましたjava -jar main.jar
ローマ

1
別のオプションは、別のファイルを必要とせずに-eオプションを使用することです。jar cfe app.jar MainClass *.class注:-eは、JDK 6で追加されました
pferate

35
  1. クラスパスを設定してコンパイルします

    javac -classpath "C:\ Program Files \ Java \ jdk1.6.0_ updateVersion \ tools.jar" yourApp.java

  2. マニフェスト.txtを作成する

    メインクラス:yourApp改行

  3. yourApp.jarを作成します

    jar cvf0m yourApp.jarmanifest.txt yourApp.class

  4. yourApp.jarを実行します

    java -jar yourApp.jar


9

次のコマンドで実行できます。

java -cp .;app.jar package.MainClass

JARファイルにマニフェストがない場合は機能します。


私がした:認識されないオプション:-cp。あなたの答えを確認できますか?私はこのコマンドがやろうとしていることをしていないからです。(java-cp。; app.jar package.MainClass)。これは1つのコマンドですか、それとも2つですか?
kenorb 2012

1
docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/…"-cp.;app.jar "は、MainClass.main()メソッドを実行するよりも、app.jarファイルをクラスパスに追加する必要があります( MainClassは「パッケージ」パッケージに含まれています)。
ダイニウス2012

1
したがって、おそらくLinuxにはこのオプション(-cp)は存在しません(私のものはjava v1.6.0_24、OpenJDKランタイム環境(IcedTea6 1.11.3)(6b24-1.11.3-1ubuntu0.12.04.1)です)。
kenorb 2012

java -version => Java HotSpot(TM)64ビットサーバーVM(ビルド20.1-b02、混合モード) "java -cp .test1.Main"は機能します
Dainius 2012

/ usr / lib / jvm / java-6-openjdk-amd64 / bin / java -version => OpenJDK 64ビットサーバーVM(ビルド20.0-b12、混合モード) "/ usr / lib / jvm / java-6-openjdk -amd64 / bin / java -cp .test1.Main "が機能します
Dainius 2012

6

このエラーが発生しました。これは、引数の順序が間違っていたためです。

正しい

java maui.main.Examples tagging -jar maui-1.0.jar 

違う

java -jar maui-1.0.jar maui.main.Examples tagging 

1
これはbsdの問題にすぎない可能性がありますが、最近は逆の方法で行ったと確信しています。
Sridhar Sarnobat 2018年

1

適切なマニフェストファイルを使用して、実行可能なJARファイルを正しく作成したことを確認する最も簡単な方法は、Eclipseを使用することです。ををビルドすることです。Eclipseプロジェクトでは、基本的にメニューから[ファイル] / [エクスポート]を選択し、プロンプトに従います。

そうすることで、JARファイルが正しいことを確認でき、まだ問題がある場合は他の場所を探すことができます。このプロセスの詳細については、FAQを参照してください。スタンドアロンSWTプログラム用の実行可能JARファイルを作成するにはどうすればよいですか。


EclipseIDEをご利用いただきありがとうございますExport
Ninh Pham

1

試してみてください

java -cp .:mail-1.4.1.jar JavaxMailHTML 

manifestファイルを持っている必要はありません。


0

NetBeansでもこのエラーが発生していることがわかりました。以下がお役に立てば幸いです。

  1. プロジェクト構成に移動するときは、実行する予定のメインクラスを設定していることを確認してください。
  2. ビルドまたはクリーンビルドを行う
  3. jarファイルを希望の場所に配置して、コマンドラインでjava -jar "YourProject.jar"をもう一度試してください。

これは、NetBeansで使用している他の「テスト」プログラムがあり、プロジェクト構成の「実行」部分のメインクラスが正しく設定されていることを確認する必要があったために発生した問題でした。

多くの祝福、ジョンP


0

実行したときに同じエラーが発生していました:
jar cvfm test.jar Test.class Manifest.txt

それを解決したのはこれでした:
jar cvfm test.jar Manifest.txt Test.class

私のマニフェストには、oracle docsに記載されているエントリポイントがあります(ファイルの最後に改行文字があることを確認してください):
Main-Class:Test


0

私も同じ問題に直面しました。このunixコマンドはメインクラスを見つけることができません。これは、実行時とコンパイル時のJDKバージョンが異なるためです。Javaコンパイラのバージョンを変更した後、Eclipseを介してjarを作成します。次のリンクは私を助けました。

http://crunchify.com/exception-in-thread-main-java-lang-unsupportedclassversionerror-comcrunchifymain-unsupported-major-minor-version-51-0/

このステップの後に作成されたjarを実行してから、実行してみてください


0

クラスパスがマニフェストで完全に指定されている場合は、Javaランタイム環境の最新バージョンが必要になる可能性があります。jre 8を再インストールすると、問題が修正されました。


0

Eclipseを使用している場合は、以下を試してください。1。プロジェクトを右クリック-> [エクスポート]を選択します。2。エクスポート先の選択でRunnableJarファイルを選択します。3。jarの名前を入力し、[パッケージが必要です...](2番目のラジオボタン)を選択します。 ->終了

お役に立てれば...!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.