質問: ### 前提・実現したいこと IntelliJ IDEA CEでGradleを用いたJavaプロジェクトを作成しました。 プログラムが出来上がったのでjarを作成したいと思っています。 そこでArtifactsの設定をしてmoduleからjarを作成したのですが、実行ができません。 どうすればよいでしょうか? ### 発生している問題・エラーメッセージ `java -jar program.jar`を実行すると次のように出ます。 ``` エラー: メイン・クラスMainが見つからなかったかロードできませんでした ``` ### 追記 jar作成時のスクリーンショットを載せます。 方法1 ---- 以下の方法だとjar内にクラスファイルなどはあるもののMANIFEST.MFにMain-Classの記述がありませんでした。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/af8134e5c4de6df4fd7a3b1daec9c0b2.png) ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/e53660be6e5f8b140f7141b743fbdad4.png) 方法2 ---- この方法だとjar内にクラスファイルなどはありませんでしたが、MANIFEST.MFにMain-Classの記述がありました。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/a2ec6e6d24908479e9a7f662ff2fb22a.png) ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/ace2c870909ab75ff9d61e1297d0705e.png) ### 追記2 作成の様子を録画してみました。 http://fast-uploader.com/file/7020687366372/ (パスワードは"makejar"です。) 他にすべき手順はありますでしょうか?
回答: できたjarファイルを展開(jar xvf program.jar)して、META-INF/MANIFEST.MFファイルの 中を確認してみてください。Main-Classの記述がなければ、Artifact設定でメインクラスが指定 されていないと思われます。 Main-Classの指定があるのならば、そのクラスが存在するか確認してみてください。存在しないなら、 Artifactに含めるモジュール等の指定が間違っていると思われます。 思われます、ばかりですみません。 ■追記 どちらも、設定画面では Main-Class の指定は入っているようですね。 それでは、右側のAvailable Elementsに 「'xxx' compile output」が残っていないかを確認してみてください。右側に表示されているものはjarファイルには入りません。例1ではモジュールhogeのcompile output(クラスファイル)はjarには含まれません。 !例1 もし、対象となるクラス(モジュール)がAvailable Elementsに入っているようならば、左側の「+」ボタンをクリックして、「Module Output」を選択してください。 !例2 以下のようなモジュール選択ダイアログが出ると思うので、とりあえず、全部のモジュールを選択して「OK」してください。 !モジュール選択ダイアログ これで試してみてください。 ■追記2 動画拝見しました。MANIFESTファイルはライブラリjarファイルのものが入っているようですね(Created-By: Apache Mavenになっている)。上書きされているのかもしれません。 Artifact設定の際、以下のようにManifestファイルの保存場所(Directory for META-INF/MANIFEST.MF)が出ていると思いますが、ここの内容を変更してみてください(モジュールのソースルートになっていると思いますので、.../src/main/java を .../src/main/manifests 等に)。 !設定ダイアログ そうすると、以下のように内容にMETA-INFが出てくると思いますので、これで作成してみてください。 私の環境ではこれで行けました。 !Artifact