2016-05-17 10 views
2

IntelliJのいくつかのクラスにまたがるプログラムを作成しました。これはIDEでテストしたときにうまく動作します。しかし、チュートリアルにしたがってプロジェクトを.jar実行可能ファイルにすると、実行されません。その上でダブルクリックしたときIntelliJ IDEAによって作成されたJARファイルは実行されません

アウトフォルダ内のファイルが実行されず、「JavaのJARファイル 『projectName.jar』は起動できませんでしたと言います。

端末から、それを開くと、私が手。エラー「を見つけるか、メインクラスをロードできませんでした。」私は

が、私はこれらのステップに続く「projectName.jarが-jar $ジャワ」使用:

  1. オープンプロジェクト構造、アーティファクトをして(+)
  2. をクリックします。
  3. JARの下では、依存関係。
  4. 私のmainメソッドでクラスを指し、OKをクリックしてください。
  5. [適用]をクリックし、[OK]をクリックして終了します。
  6. 次に、プロジェクトの構造を閉じて、[ビルド]を開いてアーティファクトをビルドします。
  7. 次に[ビルド]をクリックします。
  8. 〜/ IdeaProjects/PROJECTNAME /アウト/アーティファクト/ projectName_jar/projectName.jar
  9. に移動

その後、私はそれを実行しようとするだろうが、それは実行されません。私のプロジェクトにはGUIがあり、コマンドラインから実行できます。私がTerminalのmainメソッドをコンパイルするとうまくいきましたが、JARファイルが必要です。私は、私のコードが無関係であると確信しているので、質問に何を含めるべきか分からない。私はMavenを利用していますが、それが関連しているかどうかはわかりません。 JARを構築する前に、私がやっているべきことやプロジェクトに追加するべきことが他にありますか?

答えて

1

Main-Class属性が設定されていることを確認する必要があります。これを確認する1つの方法は、Zipユーティリティを使ってJarを開き、META-MF/MANIFEST.MFがそのファイルをメモ帳、notepad ++または任意のドキュメントリーダーで抽出または開くことを探していることです。 「Main-Class」が正しいメインクラスに含まれていない場合、受け取ったエラーが表示されます。 IntelliJチュートリアルを見ると、アーティファクトパブリッシングを設定するときにMain-Classフィールドがあります。私は以下のリンクをIntelliJページに含めました。

IntelliJ Creating an Artifact Tutorial

+0

MANIFEST.MFファイルがのIntelliJで作成されましたので、私はそれがあると仮定正しい。 Main-Classは正しいですが、2行しかありません.1つは "Manifest-Version:1.0"で、もう1つは "Main-Class:projectName"です。 –

+0

潜在的に。 Main-Class属性は完全修飾ドメインである必要があります。あなたのクラスがいくつかのパッケージまたはパッケージに入っていれば、私は.E。com.packagename.ClassName'。 [パッケージの基礎](https://newcircle.com/bookshelf/java_fundamentals_tutorial/packaging)セクション7.5を参照してください。パッケージメンバーの使用:修飾名。したがって、パッケージがない場合、属性は実行するメインメソッドを持つクラスの名前になります。 OraclesのWebサイト[アプリケーションのエントリーポイントの設定](https://docs.oracle.com/javase/tutorial/deployment/jar/appman.html)のベスト・ディスクリプションは – Underbalanced

+0

@EricChanコメント。新しいスタック。 – Underbalanced

0

これは間違った場所に作成されたマニフェストの結果であり得ます。

まずその後のjarがSRCディレクトリにない/ JavaでMETA-INFを探したり、されていることを確認します(のIntelliJは時々間違って/src/main/java/META-INF/MANIFEST.MFにそれを置く)

を、それがsrc/main/resources/META-INF/MANIFEST.MF

であることを確認してください/ resources。これが意味:

あなたが> アーティファクトファイル>プロジェクト構造を設定

>+>JAR依存関係を持つモジュールから>...その後、META-INFのためのあなたのディレクトリ/ MANIFEST.MFは、srcで終了する必要があります。例:

ONLY C:\Users\User\StudioProjects\Project\src\ 
NOT THE PREPOPULATED C:\Users\User\StudioProjects\Project\src\main\java 

あなたプロジェクト構造 jarファイルがすでにに変更にマニフェストファイルパスを設定している場合:

C:\Users\User\StudioProjects\Project\src\META-INF\MANIFEST.MF 
INSTEAD OF C:\Users\User\StudioProjects\Project\src\main\java\META-INF\MANIFEST.MF 
関連する問題