Eclipse + gradle(Buildship) + git(EGit) 事始め

# 環境構築
数年ぶりにEclipseを入れて色々ライブラリをあさるもさっそくハマる。。
そうか。。数年前に頑張って使ったMavenもgradleってのに置き換わろうとしているのね。。

ハマってあがいたあたりをメモっておく。
* 2021/4/29 いくつか試して色々わかってきたので追記＆修正。

## 記事の環境
* OS: Windows 10
* Java: OpenJDK 15.0.2
* EGit: 5.11.0
* Buildship: 3.0
* gradle: 6.6とか6.7以降。7.0はJDKのバージョンも変わっちゃってて大変そうなのでまた今度。

## 環境構築

どうやら6.6より新しいgradleと、Eclipse(EGitと？)の相性が悪そう。何が起こるかというと。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/5269db12-ec33-2b31-f63d-333a5994eb2d.png" width="250">

buildship3.0で、6.7以降のgradleを指定してプロジェクトを
作ると下のようにネストプロジェクトができますね。（ここでは`gradle-test-lib`）
まぁ、こんなもんだろうと思いEGitでrepositoryにcommitしてみると

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/9cbc502c-9dee-62fa-8e7c-1c15a21c47af.png" width="300">

あら、ネストプロジェクトが分離。gradleタスクもなんかエラーが出て不穏な雰囲気です。
色々調べてわかってきたのは、

1. Buildship3.0で、6.7以降のgradleを指定してプロジェクトを作ると`library`プロジェクトを作ってくれちゃう模様。
2. EGitでコミットするとプロジェクトのフォルダが`%USERPROFILE%/git`配下に移動する。が、1.で作られた`lib`フォルダが取り残されてしまう。プロジェクトをリフレッシュするとわかりますが`.project`ファイルとか、いかにもEclipseが参照を保持してそうなファイルだけ残るので、おそらくそれらの削除（移動）に失敗してこの**ゴミ**が残るんじゃないかと思います。
3. この**ゴミ**の`lib`フォルダが色々と悪さをする。。

### 解決策①: 6.6以前をのgradleを指定して使う

調べてみるとStack Overflowに該当する記事を発見。
[Eclipse Gradle Wizard creates project with SubFolder -lib](https://stackoverflow.com/questions/66005668/eclipse-gradle-wizard-creates-project-with-subfolder-lib)

>I tested this on Eclipse 2021-03 using the latest gradle version 7.0-rc-1 and reproduced your issue where a nested project with a lib subproject was created. I then made a new Eclipse project specifying Gradle version 6.6 to be used and the resulting project was not nested. <font color="red"> I suggest trying Gradle 6.6 and seeing if you get the same behavior I got. This might fix your project.</font>

6.6にしろと。。さっそくやってみます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/b1e3c600-43c9-e80c-39a5-1d914345c595.png" width="600">

生成されたプロジェクトのフォルダ構成を確認すると`lib`フォルダができてませんね。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/2c64c373-3718-eb39-dc94-93252d0ab890.png" width="250">

ではcommit...

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/78d17ce4-f839-39f4-fb17-da0e5d3c841f.png" width="300">

うまいく行きましたね！
ただ、6.6以前のgradleを使ってもマルチプロジェクト構成にすると同じ問題が
おこるかも？というわけで、そういう問題にぶつかったらまた加筆します。

### 解決策②: gradle6.7以降を使い、邪魔なフォルダの整理でしのぐ

前述した通り、gradle6.7以降が勝手に生成するネストプロジェクトが存在する
状態でEGitでコミットをするとゴミフォルダが残るのが問題。なので、たぶん解決策は

1. EGitでコミットする前にネストプロジェクトを消して、後で追加する。
2. EGitでコミットをして、後でごみの`lib`フォルダを消す。

の2つがありそう。今回は2を試してみます。

#### 解決策②-1 マルチプロジェクトを先に消してからあとで作る。

今回はは諸事情により6.7ではなく6.8.1を選択。まぁ6.7とかでもほぼ同じでしょう。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/34084670-6b7f-5ad8-575a-9e9fb2285966.png" width="500">

Gradle project structureに`lib`なるネストプロジェクトを作るぜって出てますね。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/4e924706-8080-ec37-5ecd-9944e1466598.png" width="500">

ネストプロジェクトが入ったtestプロジェクトができました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/d593f91c-2062-e0f1-8d94-db4f7f0c84ba.png" width="250">

まずは気にせずにEGitでリポジトリにコミットします。すると。。ネストプロジェクトだった
`lib`が別プロジェクトになってしまってますね。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/cd585696-53d9-12b6-a567-99057b0a81a5.png" width="300">

分離した`lib`プロジェクトを開いてリフレッシュしてみるとわかりますが、こちらには
ゴミしか残ってません。なので、おそらくはEGitが何等かの理由で元のワークスペース
配下にあった`lib`フォルダを消すのに失敗した模様。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/b314626f-1d6a-5e83-732f-7ce87c3027e3.png" width="300">

また、もう一つ注意したいのが、`test`プロジェクトの配下には実は表示されて
ませんが`lib`フォルダが存在しています。まぁ、何か不整合が発生しているんでしょうね。。
この後やることは二つ

1. ゴミだけが残った`lib`プロジェクトを実際のファイルごと削除。
2. `test`プロジェクトでgradle refreshをかけること。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/23e069f7-c470-b412-22ef-3813ad81d95d.png" width="300">

無事にエラーも消えてネストされたプロジェクトフォルダ`lib`も表示されました。
これで大丈夫そうですね。