IntelliJ で Gradle のマルチプロジェクトを設定して JAR ファイルのビルドを行う


つまずく箇所が多かったので、健忘録です。
※ IntelliJ IDEA CE 2017.3 で確認

## 新規プロジェクトの作成
Gradle のプロジェクトを作成。
ルートプロジェクトなので "追加のライブラリーおよびフレームワーク" から全てのチェックを外す。
![01.png](https://qiita-image-store.s3.amazonaws.com/0/54471/07f3ce35-caa2-6f67-5aee-45bdefbb66e4.png "01.png")
![02.png](https://qiita-image-store.s3.amazonaws.com/0/54471/4fa95b51-ee13-1cff-1b9e-13f9cf880c26.png "02.png")
![03.png](https://qiita-image-store.s3.amazonaws.com/0/54471/4d862a44-1514-258e-1da3-b3d90e392a72.png "03.png")

## shared プロジェクト（モジュール）の追加
IntelliJ の "プロジェクトビュー" を右クリックし、コンテクストメニューから [新規] → [モジュール] を選択し、shared モジュールを追加する。
![04.png](https://qiita-image-store.s3.amazonaws.com/0/54471/d99202fe-ae69-6f9d-bad1-c52921ab48cb.png "04.png")

こちらは "追加のライブラリーおよびフレームワーク" の [Java] にチェックを付ける
![05.png](https://qiita-image-store.s3.amazonaws.com/0/54471/1e6568ee-5320-ab49-db30-00beebc52ce9.png "05.png")
![06.png](https://qiita-image-store.s3.amazonaws.com/0/54471/145d5ae6-74ba-d5ee-8a40-86b7f7213adb.png "06.png")
![07.png](https://qiita-image-store.s3.amazonaws.com/0/54471/9c325298-7577-5c64-499c-f692b3255f29.png "07.png")

<table>
  <tbody>
    <tr>
      <td>
        "プロジェクトビュー" からではなく、"プロジェクト構造" ウインドウから追加するのはダメっぽい。<br>
        （なぜか、"次へモジュールとして追加" 欄へ親プロジェクトが指定できない）<br>
        <img alt="04B.png" src="https://qiita-image-store.s3.amazonaws.com/0/54471/9afdb2d7-0f17-f234-0064-9f20354b0322.png">
      </td>
    </tr>
  </tbody>
</table>

追加が完了したら、適当な共通機能を実装する。
![08.png](https://qiita-image-store.s3.amazonaws.com/0/54471/434b1144-0c14-ba8f-7f1b-c4e495dae5d3.png "08.png")

## app モジュールの追加
続けて共通機能を利用する側のモジュールを同様の手順で追加する。

追加が完了したら "build.gradle" ファイルの `dependecies` に shared モジュールを追加し、適当な機能を実装する。
![09.png](https://qiita-image-store.s3.amazonaws.com/0/54471/7684a0c6-df61-1d5c-0756-6567383c2c76.png "09.png")

続けて "実行/デバッグ構成" を設定し、実行できることを確認する。
![10.png](https://qiita-image-store.s3.amazonaws.com/0/54471/e1c8bea9-4421-cbc9-bda2-e16e8464350a.png "10.png")
![11.png](https://qiita-image-store.s3.amazonaws.com/0/54471/c2983325-8f08-e811-d487-175457292ed6.png "11.png")

## JAR ファイルの生成
デフォルトの状態だと Gradle の出力ディレクトリ設定と、IntelliJ の設定が異なるため正常な JAR ファイルが生成されない。

<table>
  <tbody>
    <tr>
      <td>
        <p>参考: <a href="https://stackoverflow.com/questions/45174989/building-with-intellij-2017-2-out-directory-duplicates-files-in-build-director/46035904#46035904" target="_blank">stack overfloe - Building with Intellij 2017.2 /out directory duplicates files in /build directory</p>
        <img alt="12B.png" src="https://qiita-image-store.s3.amazonaws.com/0/54471/5ebaaf7a-ca49-7692-eb5d-da15e26f251e.png">
      </td>
    </tr>
  </tbody>
</table>

このため shared モジュールと app モジュールの "build.gradle" ファイルで、明示的に出力ディレクトリを指定する。
![12.png](https://qiita-image-store.s3.amazonaws.com/0/54471/b7b9e57a-3cfd-c5e4-4096-49ababf49a97.png "12.png")


続けて "プロジェクト構造" ウインドウの "プロジェクト設定" 内の [成果物] から [+] → [JAR] → [依存関係をもつモジュールから...] を選択して成果物を追加する。
![13.png](https://qiita-image-store.s3.amazonaws.com/0/54471/4e4eee10-754a-d2bc-70b0-7192e1d42ab3.png "13.png")

モジュールとメイン・クラスを指定する際に、マニュフェストファイルのディレクトリを `java` から `resources` に変更する。
![14.png](https://qiita-image-store.s3.amazonaws.com/0/54471/af4e7cc9-ac21-2ae3-371d-9f2e49ada2d3.png "14.png")


最後に JAR ファイルを正常に実行できることを確認する。
![15.png](https://qiita-image-store.s3.amazonaws.com/0/54471/1b60880e-2cdb-2ee7-e2a3-d4a40259becc.png "15.png")