【Maven】Mavenについて


#■概要
- 以下のサイトでMavenについて学習し、学習内容をキュレーション（まとめ）する<br>https://www.techscore.com/tech/Java/ApacheJakarta/Maven/index/


#■Mavenとは
- `Apache Software Foundation`で開発されたソフトウェアPJ管理ツール
- `Project Object Model (POM)`という考え方でPJのライフサイクルを管理
- <font color="Red">PJの全情報は、`pom.xml`に集約される</font>
- メリットは、 **開発者が短期間でPJを理解するサポート** するための支援機能
- デメリットは、 **Mavenを理解していないと恩恵を受けれない** という制約

#■入手方法
- 以下のサイトから入手可能<br>https://maven.apache.org/download.cgi
- 導入の参考になるQiita記事<br>https://qiita.com/saitoryc/items/737ee9e711f1ebe0dcfa

#■アーキテクチャ
![画像](https://camo.qiitausercontent.com/8cb6079f4d6aea3cb4e44093e4fa7c2590c849d9/68747470733a2f2f7777772e7465636873636f72652e636f6d2f706167655f6174746163686d656e74732f303030302f303632322f4d6176656e732d4172636869746563747572652e706e67)<br>参照元：https://www.techscore.com/tech/Java/ApacheJakarta/Maven/index/

- 各タスクを`mvnコマンド`を使用して実施できる
- ビルド方法はPJが違っても同じ（<font color="Red">Mavenのメリット</font>）
- ローカル/リモートリポジトリには、プラグインやライブラリが配置される
- ライフサイクルの流れ

```ライフサイクルの流れ
①PJ作成
②コンパイル
③ユニットテスト
④ドキュメンテーション
⑤JAR作成
⑥ローカルリポジトリへの反映
⑦リモートリポジトリへの反映
⑧PJクリア
```

#■Mavenの実行
- `mvnコマンド`を実行する
- 実施したいタスクは、引数で指定
- `conf/setting.xml`には環境に応じた設定を行う
- `-help引数`で不明箇所を確認できる

#■ライフサイクル
- 各ライフサイクルごとにポイントを確認する

##①PJ作成
- PJの雛形（スケルトン）を作成できる
- `pom.xml`はデフォルトで作成される
- 標準ディレクトリ構成が推奨されている
- 成果物の作成に必要なファイルは`src`配下に配置される

	|パス|解説|
	|:--|:--|
	|src/main/java|javaのソースコード|
	|src/test/java|テスト用のjavaのソースコード|

- `pom.xml`の各要素

	| 要素         | 解説                                                                     |
| :--          | :--                                                                      |
| modelversion | POMのバージョン<br>※特別変更不要                                         |
| groupId      | PJを一意に識別する名前。<br>PJのルートパッケージ名を指定するのが一般的。 |
| artifactId   | PJの成果物の名前。<br>作成するjar/warなどの名前に使用される。            |
| packaging    | 作成する成果物のパッケージタイプ。<br>デフォルトだとjar。                |
| version      | PJのバージョン。                                                         |
| name         | PJの表示名。<br>ドキュメント作成時などに使用される。                     |
| url          | PJのサイトのURL。<br>ドキュメント作成時などに使用される。                |
| dependencies | PJが依存するライブラリの情報。                                           |



```構文
$ mvn archetype:generate -DgroupId=<ID> -DartifactId=<ID>

[引数の解説]
- archetype:generate → 雛形作成を指定する引数
- -DgroupId → PJのルートパッケージ名
- -DartifactId → PJ名
```

##②コンパイル
- ソースコードをPJで実行可能な形式（.class）に変換する
- 作成されらclassファイルは、`target/class`配下に出力される

```構文
$ mvn compile
```

##③ユニットテスト

```構文
$ mvn test
```

- デフォルトでは、以下の条件に合致するファイルがテストとして実行される

	```
**/Test*.java
**/*Test.java
**/*TestCase.java
```

- デフォルトでは、以下の条件に合致するファイルはテストから除外される

	```
**/Abstract*Test.java
**/Abstract*TestCase.java
**/*$*
```

##④ドキュメンテーション
###1.Javadocの作成
- `target/javadoc`配下にJavadocが配置される

```構文
$ mvn javadoc:javadoc
```

###2.サイトの作成
- 標準では`src/site`配下に必要な情報が配置される
- サイト作成に関する情報は、`src/site/site.xml`に記載する

```構文
$ mvn site
```

##⑤JARファイルの作成
- JARファイルの名前は、`pom.xml`内の`artifactId`と`version`から決定される
- JARファイルはtarget配下に配置される

```構文
mvn package
```

##⑥ローカルリポジトリへのインストール
- 作成したJARファイルをローカルリポジトリにインストール（反映）することができる
- インストール（反映）が完了すると、他PJからも参照できる

```構文
mvn install
```

##⑦リモートリポジトリへの配置
- `pom.xml`に必要となるrepository情報を設定する必要がある
- `pom.xml > project/project/distributionManagement` 要素の入れ子として `repository` 要素を追加する
- repositoryの子要素

	|要素名|解説|
|:--|:--|
|id|リポジトリの識別子|
|name|リポジトリの名前|
|url|リポジトリの場所を示すURL|

```構文
$ mvn deploy
```

##⑧PJのクリーン
- `target`配下を削除する

```構文
$ mvn clean
```