【コタツ級】私がJavaFX 11とMavenから実行可能なjarファイルを作れるようになるまで【丸パクリ】

はじめに
-------
これまて長らくJava 1.8とその付属（？）のFXをNetBeansで使っていましたが、趨勢的に11に上げようとするも配布用のJarを作ることは出来ませんでした。
私はMavenについて知識が無いので勉強するか使わなければ状況も変わるのかもしれないのですが、そうも行かないので困っていました。
コマンドラインでじぇいりん君とやらを操作すれば出来るのかもしれませんがネットの大体の記事はLinux前提で書かれていたりしてWindows上でのデスクトップアプリを作ろうとする私の目的と馴染まなかったり、コーディング以外はGUIで操作できるのがIDEの利点と考えているのでわざわざ黒い画面を出すのもどうよという気分で腐っていました。
そして一月半くらい色々調べても分からなかったので諦めて1.8を使い続けようかと断念しかけていたのですが、どうにか出来るようになりました。


使用環境
-------
Product Version: Apache NetBeans IDE 16
Java: 17.0.3.1; Java HotSpot(TM) 64-Bit Server VM 17.0.3.1+2-LTS-6
Runtime: Java(TM) SE Runtime Environment 17.0.3.1+2-LTS-6
System: Windows 10 version 10.0 running on amd64; MS932; ja_JP (nb)

元ネタ
-------
このYouTubeです。


https://youtu.be/EyYb0GmtEX4

これを見ればもうこの記事を見る必要はありません。
タイトルからお察しの通り、これはこの動画通りに私がやった手順を記録しただけで何のオリジナル要素も無いパクリ記事です。
しかし皆様の利便性の向上が見込めるという大義名分のもとにご紹介させて頂くことにしました。（Mavenだけに）

実践
-----

1．プロジェクトを新規に作るところから始めました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/559f022a-4147-94d1-ab64-4d4756da5c6d.png)


2．普通にFXML付きのプロジェクトを選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/847d9c57-ebc0-34f3-6d27-cf7a03d72e63.png)

3．プロジェクト名を変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/f2a33cb6-c593-4e09-53ef-4f4e82db1c63.png)
この後に出てきますがプロジェクトのプロパティで私の環境では初めからJava11の表示になっているのでここで表示されているAdditional Creation PropertiesのValueはその影響を受けるかもしれません。
このあたりは私には分からないので勘弁して下さい。

4．ビルドに成功しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/b4f93a1f-6bd4-e2a5-ddfa-b6a3226d973d.png)
さくさく進めます。（SUCCESSだけに）

5．プロジェクトのタグに出現しているのを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/a0b96728-9f92-5a5c-df2b-c91a5ba880b3.png)

6．ここのSource/Binary/Formatは希望通り初めから11になっているのですが、恐らく以前別のプロジェクトを作った時の設定を引き継ぐのでしょうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/2cda2520-fdac-7c83-2a2a-d5693afffd41.png)
そして私はここがどういう効力なのかは分かっていませんが、初心者なのでイチイチ気にしません。（11だけに）
3の工程に影響がありましたら済みません。

7．ここは11を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/ead5447b-c09d-9260-0678-d4b4dff6e85a.png)
なんで11なんだ17でやればいいじゃ無いかと思われるかもしれませんが個人的に諸般の事情があるのです。
あとJava Plathomeの追加の仕方は各自調べて下さい。
そして面倒くさい説明を省くのはズルイなどと言わないで下さい。（Zuluだけに…すみません、もう止めます）

8．素の状態のまま一旦起動してみます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/77f2135b-45f8-3466-8997-1207c5baeb17.png)

9．IDE内での起動には成功します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/22988adb-6872-aa39-88ca-9b8c185eb6fa.png)
ここからが正念場です。

10．App.javaと同じパッケージにメインクラスを作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/1ece1450-a3fe-96fc-461f-0abe81043b2b.png)

11．クラス名はMainにします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/c2849cc7-b80b-4871-259d-d6b986637b3f.png)

12．mainメソッドの中身を書きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/4bc8c824-1412-b89f-45cc-ab0da2e4eca3.png)
メインクラスではなく普通のクラスを作ってしまった方はここでメソッドの外側ごと書けば大丈夫です。

13．念の為に自作のMain.javaから起動できるか確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/55544b88-0fc4-82dd-33be-9838b35c9965.png)

14．起動できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/2081b849-550c-73e2-7b0d-50afd99581e5.png)

15．今度はProject Files配下のpom.xmlを開き最下端付近の``</plugins>``を確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/a1be3b91-b5ee-153f-031f-09eece202bd7.png)

16．ここで冒頭で紹介したYouTubeのページを開き、概要欄の「もっと見る」をクリックして展開された中にあるリンクをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/901af7f7-2744-c23e-d41e-02e3462e041a.png)
だから初めからビデオだけ見てればいいだけの話なのですが…申し訳ないです。

17．ここにある内容をそっくり15のpom.xmlに追記挿入するのですが、同じページで疑義が呈されていました

https://gist.github.com/Da9el00/df8efbc8de53cd39463c05cbeb0503d3

なんでもバージョンが欠けているのでそれを入れればうまくいくよとの事。

:::note warn
EpicConOwO commented on Mar 12, 2022 • 
i did some digging, for me the problem was "version" tag was missing, adding version tag fixed the issue for me.
:::

端折って後の提案の方をコピペしました（ここもそっくり引用しています）


           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-shade-plugin</artifactId>
               <version>3.2.4</version>
               <executions>
                   <execution>
                       <goals>
                           <goal>shade</goal>
                       </goals>
                       <configuration>
                           <shadedArtifactAttached>true</shadedArtifactAttached>
                           <transformers>
                               <transformer implementation=
                                                    "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                   <mainClass>com.game.hangman.Main</mainClass>
                               </transformer>
                           </transformers>
                       </configuration>
                   </execution>
               </executions>
           </plugin>

18．コピペが終わった状態
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/6eaea885-ebdd-8e69-814b-eb5bac884a1b.png)
``</plugins>``の手前に入れ込む形ですね。

19.``<mainClass>``のタグのクラス名をご自身のご作成状況にあわせて変更します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/4d9fa99a-5812-a357-cef2-b0f981b133ab.png)

20．プロジェクトを右クリックしRun Maven->Goals..を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/14c3845c-23c4-c73d-2b84-fe938c2555a5.png)

21．Goalsにcleanと入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/1ba432a9-c9be-1f32-4e52-b71370bdeb87.png)

22．補完機能の提示を無視しcleanだけでOKを押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/14623224-f455-6386-9c2e-695d2af5076f.png)
余りにも無知でclean:cleanと何が違うのか分からないですが、これを選択すると駄目でした。

23．一旦起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/6959e876-5e09-9667-748b-a898fc3d68a2.png)
図は省略しますが、普通に起動するはずです。

24．プロジェクトを右クリックしRun Maven->Goals..を再び選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/b8dde01e-1a33-2ad4-827c-e1a1169787ab.png)

25．Goalsにinstallと入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/3f2cca73-8590-c267-7d2b-bbc75bcd1fd7.png)

26．ここでも補完機能の提案は選択せず、OKを押下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/7544faeb-ae04-2feb-7d01-28f47b9c4be4.png)

このあたりで赤字で色々と表示されるのですが私は英語が全く分からないので勝てば官軍で進めます。

27．targetフォルダに二つのjarが出来ているはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/b0d68234-3d43-2257-0f74-4bc915ab4f6e.png)
-shadedと付いている方をダブルクリックします。
（万が一のぬか喜びを避ける為にIDEを先に終了させておいた方が良いでしょう）


# 28．ゴーーーーーーーーーーーーーーーーーーーール！ #

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48602/de71ec3f-defd-2c6a-a456-2c42dab4371d.png)
（Goalsだけに…）



愚痴
-----
組めて、走って、配れる。
そんな当たり前の喜びもAIに奪われる日はもうすぐなのでしょう。