【超初心者向け】Maven超入門

# <font color="blue">Maven超入門</font>
この記事は、Maven開発環境を構築した際の覚え書きを兼ね、次のような方々へ向けた記事です。
・いろんなWebを見たけど、何かしらが欠けていてMaven開発環境が構築できない
・理屈とか仕組みとかはいいから、とりあえずMaven開発環境だけ構築できればいい
・使いたいライブラリに「dependency」と説明があるだけで、自分でビルドする設定が見当たらない
・Maven自体はわかるが、Eclipseと連携ができない

# <font color=blue>Mavenとは</font>
「Maven」とは、要するにJavaプログラムをビルドするためのツールです。
C言語を触ったことがある人は、makeのようなものと言えばイメージがしやすいかと思います。

似たようなツールに、AntやGradleなどありますが、使い方とかが違うだけで、本質的には同じです。
コンパイルの前後に依存するライブラリを自動で揃えたり、**XMLさえ書けば**、いろんなことがビルドと一緒にできるツールです。

「Mavenとは」で検索すると、難しいことをたくさん書いてあるWebがたくさん出てきますが、超入門の段階では、それらをすべて読み解く必要はないと思います。
Mavenに限らず、筆者はどんなことにもそんな感じの心構えです(笑)
この記事は、そんな筆者のような「とりあえず」体質の方へ向けたものです。

「いや、私は隅から隅まで理解したいんだ！」という方は、最後に参考のリンクも載せますので、そちらをご覧ください。

# <font color=blue>1. Mavenのインストール</font>
まず、Maven本体をインストールします。
これ以降は、Windowsでの開発環境を前提に記事を記載します。
MacやLinuxをご利用の方は、読み替えるなどをお願いします。

## <font color=blue>1.1. ダウンロード</font>
[こちら](https://maven.apache.org/download.cgi)から、Maven本体をダウンロードします。
Windowsなので、zip形式のものをダウンロードしましょう。

![picture01.jpg](https://qiita-image-store.s3.amazonaws.com/0/189344/3b36b680-1077-4b4f-a848-112b4cfbb5c9.jpeg)
※記事執筆時点での最新は3.5.0です。

## <font color=blue>1.2. インストール</font>
ダウンロードしたzipを任意のフォルダに解凍します。
筆者の環境では、「C:\maven」としました。　※フォルダ名は変更しました。

解凍後は以下のようなツリーになります。

```:Tree
C:\maven
　├─bin
　├─boot
　├─conf
　│  └─・・・
　└─lib
　　　├─・・・
　　　└─・・・
```

## <font color=blue>1.3. システムパスの設定</font>
環境変数Pathの先頭に「C:\maven\bin」を追加します。

■環境変数Pathの追加方法(Windows7)の場合
コンピュータを右クリック ＞ プロパティ(R) ＞ システムの詳細設定 ＞ 環境変数
の順にクリックします。
その中の下の窓、システム環境変数(S)内にあるPathに、「C:\maven\bin」を追加します。

## <font color=blue>1.4. インストールの確認</font>
コマンドプロンプトを起動し、「mvn -version」とコマンドを入力します。
下記のような表示ができればインストール完了です。

```SHELL:コマンド表示例
	Apache Maven 3.X.X ～省略～
	Maven home: C:\maven
	Java version: 1.8.0_xxx, vendor: Oracle Corporation
	Java home: C:\Program Files\Java\jre1.8.0_xxx"
	～省略～
```

# <font color=blue>2. Mavenの設定</font>
さて、ここまででインストールが完了しました。
ここからはインストールしたMavenへの設定を行います。
この設定は、人によってはやらなくていい方もいらっしゃるかと思いますが、やっておかないと後々困るかもしれません。

詳細には記載しませんが、筆者はここの設定をすっ飛ばしたおかげで、後で大層困りましたorz

## <font color=blue>2.1. ローカルリポジトリの設定</font>
まずは、Mavenが依存するライブラリなど、ダウンロードしたjarなどを置いておくリポジトリをローカルに作成します。
この設定を行わない場合、Mavenのデフォルトのリポジトリが作成されますが、管理しやすくするためにも設定しておくほうが無難です。

ローカルリポジトリは、インストールしたMavenのディレクトリ(以下、MAVEN_HOME)内の、confにある、「settings.xml」にリポジトリのパスを記述することで設定します。

settings.xmlには、初めからたくさん英語が書いてありますが、ほとんどはコメントです。
そのなかに\<localRepository>タグがあるはずなので、そこにリポジトリの設定を記載します。

コメントアウトを外して復活させてもよいのですが、今回は、コメントのすぐ下に記載します。

```xml:settings.xml(抜粋)
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<!-- ★ここから★ -->
<localRepository>C:/maven/repository\</localRepository>
<!-- ★ここまで★ -->
```

筆者はMAVEN_HOMEをローカルリポジトリに設定しました。

## <font color=blue>2.2. プロキシの設定</font>
プロキシ環境下でMavenを利用する場合、セントラルリポジトリなどからライブラリをダウンロードする際に、プロキシを設定していないと接続できません。
こちらも、settings.xml内に記載します。

```xml:settings.xml(抜粋)
<!-- proxies
| This is a list of proxies which can be used on this machine to connect to the network.
| Unless otherwise specified (by system property or command-line switch), the first proxy
| specification in this list marked as active will be used.
|-->
<!-- ★ここから -->
<proxies>
	<proxy>
		<id>proxy01</id>　　　※settings.xml内で一意であれば何でも構いません
		<active>true</active>
		<protocol>http</protocol>
		<username>proxyuser</username>　　※プロキシ接続にユーザが必要であれば記載します
		<password>proxypass</password>　　※プロキシ接続にパスワードが必要であれば記載します
		<host>proxy.host.net</host>　※ホスト名、またはIPアドレスで記載します
		<port>8080</port>
		<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
	</proxy>
</proxies>
<!-- ★ここまで -->
```

こちらで、Maven本体の設定は終了です。

# <font color=blue>3. Eclipseの設定</font>
そろそろ疲れたころですが、Mavenが使えるようになるまでは、まだまだです。
ここからはEclipseの設定を行います。
筆者の環境では、Eclipse4.4(Luna)を使用します。

## <font color=blue>3.1. Mavenプラグインのインストール</font>
まずは、プラグインをインストールします。

Eclipse上で、
ヘルプ ＞ Eclipseマーケットプレース
をクリックし、出てきたウィンドウに「m2e」と入力し、検索してください。
検索結果から、「Eclipse用 Maven 統合(Luna and newer)1.5をインストールします。

![picture2.jpg](https://qiita-image-store.s3.amazonaws.com/0/189344/3cbff7cd-a032-1d6b-c654-e21a7786f015.jpeg)
※筆者の環境ではインストール済みなので、「アンインストール」になっています。

インストール後、Eclipseを再起動すれば完了です。

## <font color=blue>3.2. Mavenプラグインの設定</font>
インストールしたプラグインを設定します。
この設定も、やらなくてもうまくいく方もいらっしゃるかもしれませんが、筆者の環境では、これをやらない状態だと「ビルプランが計算できませんでした」だか何だかのエラーで、ビルドすらできない状態になりました。
※正確なエラーメッセージは覚えてません

ウィンドウ ＞ 設定
をクリックし、設定ウィンドウを表示します。

Maven ＞ ユーザー設定
と進み、「ユーザー設定」のテキストボックスに、先ほど設定したsettings.xmlを入力します。
入力後、OKボタンをクリックし、Mavenプラグインの設定は完了です。

![picture3.jpg](https://qiita-image-store.s3.amazonaws.com/0/189344/7b172936-d3fd-9646-1e3f-01568b7f5cff.jpeg)

# <font color=blue>4. MavenでHello World!</font>
さて、ここまでずいぶん長い下積みが続きましたね。
ここまででMavenを使う準備は一通り済みました。
もちろんプロジェクトに応じて設定を調整する必要はありますが、とりあえず動く環境を作る分にはこれで不自由はしないでしょう。

ここからは、実際にMavenを使用したプロジェクトを作成し、おなじみHello Worldを出力するプログラムを作ります。

## <font color=blue>4.1. Mavenプロジェクトの作成</font>
まずは、Eclipseのプロジェクトを作成します。
Mavenのコマンドでプロジェクトを作る方法もありますが、今回はEclipseからプロジェクトを作成します。

ファイル ＞ 新規 ＞ その他 ＞ Mavenプロジェクト
を選択し、プロジェクト作成画面を表示します。

![picture4.jpg](https://qiita-image-store.s3.amazonaws.com/0/189344/3549143e-de7e-8253-5479-b5f0520f19b3.jpeg)

「次へ」をクリックし、次の画面へ進みます。
「シンプルなプロジェクトの作成」にチェック入れ、次へ進みます。

![picture5.jpg](https://qiita-image-store.s3.amazonaws.com/0/189344/f83df9ac-9136-1190-7212-423cea27caca.jpeg)

グループIDとアーティファクトIDに任意のIDを入力し、「完了」をクリックします。

![picture6.jpg](https://qiita-image-store.s3.amazonaws.com/0/189344/492a8c31-485a-be66-956e-7ca148aa4fd4.jpeg)

少し待つと、画像のようなツリーを持ったプロジェクトが作成されます。
しかし、初めからなぜか黄色いビックリマークが・・・なんだこれ・・・？
と思って、問題ビューを見てみると、ビルド・パスが何たらと言っている模様・・・
環境によっては出ない人もいると思いますが、筆者はこういう引きが強いので、人がならないようなエラーでも、必ず引きます。

![picture7.jpg](https://qiita-image-store.s3.amazonaws.com/0/189344/355afc0e-0cd4-a205-a2fb-4033be51d944.jpeg)

警告は出ているものの、プロジェクトの作成までは一旦終了です。
警告を気にしなければ、このままでも十分にMaven開発ができます。
「所詮警告だろ？」と思う方は、このままガンガン開発しちゃってください。

しかし、「え？何この警告？意味不明だし消したいんだけど？」と思う方、安心してください。
続きを読んでもらえれば、この警告を消す方法もご紹介します。

# <font color=blue>5. pom.xmlの編集</font>
プロジェクトができたところで、いよいよ実戦的な内容に入ります。
Mavenには、ここまで退屈な準備作業を踏み越えてくるだけの価値があります。
きっと、つかえて損はしないはず。
何故なら、**XMLさえ書けば**Mavenがルールに従て勝手にビルドしてくれるのだから。
本気出せばビルドした後にデプロイまで勝手にやってくれます。

しかし、冒頭にも述べましたが、それには**XML**を書かんといかんのです。
そう、**XMLさえ書けば**Mavenのうまみが享受できるのです。

そのXMLが問題なわけです。めんどいわけです。
今まで散々書いてきたXMLの設定ファイル。意味不明なタグを何重にも入れ子にし・・・タグを閉じ忘れてエラーをくらい・・・
なんて黒歴史はこれくらいにして、XMLの書き方を紹介しましょう。

## <font color=blue>5.1. pom.xmlとは</font>
その名の由来は、特に調べてないので知りませんが、プロジェクトの設定を管理するMavenの設定ファイルです。
構成要素には大きく
・dependncy
・plugin
があり、プログラムを開発するうえで、必須のライブラリや、Mavenに便利な機能を付加するためのプラグインはどんなものを使いますよと言ったようなことをつらつらと書いておく設定ファイルです。

正直めんどいのですが、自分でWebの世界を飛び回って、最新のjarをダウンロードして、ライブラリ管理フォルダを作って、そこに入れて、ビルド・パスを設定して・・・なんてことをするよりかは、幾分かマシです。

その他、一度このpom.xmlを作ってしまえば、大勢で開発するようなとき、このファイルだけを渡してあげれば、あとは個々のメンバーが大層な手順で開発環境を構築する必要がなくなります。
そんなMaven開発のうまみを享受するために、頑張ってpom.xmlを編集しましょう。

## <font color=blue>5.2. compilerプラグイン</font>
Mavenにはjavaをコンパイルするにもプラグインの導入が必要です。
「え？何それ？つかえね！」とか思わないでください。
プラグインさえ入れれば、結構何でもできるのです。
その中で、初めに必ず導入しなければならないのが、compilerプラグインです。

Eclipseのプロジェクトを作成した時、警告が発生していたはずですが、その警告も、compilerプラグインを導入し、しっかり設定してやれば、解決します。
プラグインの導入には、pom.xmlにプラグインの設定を書き込みます。

hello-worldプロジェクトのルートにpom.xmlというファイルがあると思います。
こちらを次のように編集します。

```xml:pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
	http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>maven.hello</groupId>
<artifactId>hello-world</artifactId>
<version>0.0.1-SNAPSHOT</version>

<!-- ★ここから -->
<!-- 文字コードとJavaのバージョンの設定 -->
<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<!-- 筆者の環境ではバージョンは8に設定します -->
	<java.version>1.8</java.version>
</properties>

<!-- プラグインの設定 -->
<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>3.6.1</version>
			<configuration>
				<!-- ここでJavaのバージョンを設定する -->
				<source>${java.version}</source>
				<target>${java.version}</target>
			</configuration>
		</plugin>
	</plugins>
</build>
<!-- ★ここまで -->
</project>
```

上記の内容をpom.xmlに書き込み保存します。
すると、Eclipseのビルドが始まり、プロジェクトを作成した時から発生していた警告が消えるかと思います。

pom.xmlの内容を修正しても警告が消えない場合、
プロジェクトを右クリック ＞ Maven ＞ プロジェクトの更新(U)
をクリックします。

![picture8.jpg](https://qiita-image-store.s3.amazonaws.com/0/189344/b96abe99-9349-c3ca-4760-5eee8080b752.jpeg)

## <font color=blue>5.3. Hello World!</font>
ここまででプロジェクトの設定はすべて完了しました。
あとは、実際にHello Worldを出力する処理を組み込んで完成です。

パッケージ・エクスプローラーに表示されている「src/main/java」に通常のJavaプロジェクトと同様にクラスを追加しましょう。

```java:HelloWorld.java
package hello.main;

/**
 * MavenでHello World
 */
public class HelloWorld {
	/**
	 * main処理
	 * 標準出力にHello Worldを表示する。
	 * @param args コマンド引数
	 */
	public static void main(String[] args) {
		System.out.println("Hello Maven World!");
	}
}
```

このクラスを追加すれば、Hello Worldの実装完了です。
このままJavaアプリケーションとして実行すれば、ふつういHello Worldを実行することができます。
しかし、これはMavenプロジェクト！
Mavenでビルドしたものを使いましょう。

## <font color=blue>5.4. Mavenを使用したビルド</font>
最後に、Mavenを使用してJavaプロジェクトをビルドする方法を紹介します。
今回は、コンパイルからビルド成果物までをすべて一度で生成するので、goalは「install」を指定します。
goalというのは、Maven実行時に指定するコマンド引数です。
厳密にはきちんとした意味があるのですが、ここでは説明しませんので、そのあたりはきっちりした参考書籍を見て「フェーズ」と「ゴール」を理解してください。

Mavenでinstallなる行為を行うには、
プロジェクトを右クリック ＞ 実行 ＞ install
を選びます。

![picture9.jpg](https://qiita-image-store.s3.amazonaws.com/0/189344/343f13ab-5853-811b-cad8-3248e3efe2cf.jpeg)

すると、コンソール上でガリガリ処理が進みます。
初めてのビルドは、Compilerプラグインなど、たくさんのものをMavenセントラル・リポジトリというところからダウンロードするので、結構時間かかります。

最後に、
[INFO] BUILD SUCCESS
と出力されれば、無事にビルド完了です。

するとプロジェクト内に「target」というフォルダが現れ、そこにビルドしたjarファイルがあるはずです。
現れない場合は、プロジェクトをリフレッシュしてください。
これまでの手順通りに作業した場合、「hello-world-0.0.1-SNAPSHOT.jar」というjarファイルがビルドされているはずです。

こちらをコマンドプロンプトで実行すれば、Hello Worldが実行できます。
今回は、エントリポイントを指定した実行可能jarファイルとしてビルドはしていないので、以下のコマンドで実行してください。

コマンド:`java -classpath hello-world-0.0.1-SNAPSHOT.jar hello.main.HelloWorld`

すると、「Hello Maven World!」の文字列がコマンドラインに！

おめでとうございます！
そして、お疲れ様でした！
これで、無事にMavenを使用してJavaプログラムが作成できましたね！

# <font color=blue>6. 最後に</font>
だいぶ長くなりましたが、ここまでお付き合いいただきありがとうございます
いかがでしたでしょうか？少しはMavenの使い心地を体験していただけたでしょうか？
少しでも、Mavenの開発環境構築につまづいていた方のお役にたてたなら幸いです。

また、これを機にMavenを知ったので、使ってみようと思ってくれた方がいらっしゃればそれほどに嬉しいことはありません。

# <font color=blue>EX. 参考</font>
・TECHSCORE
http://www.techscore.com/tech/Java/ApacheJakarta/Maven/2/

・Maven 3 の基本的な使い方
https://www.qoosky.io/techs/07d7bf8708

・Mavenの使い方
http://qiita.com/soushiy/items/6095401054959ce5d1a5