[Java][Maven3] Maven3の使い方まとめ

Apache Maven 勉強用メモ。

# この記事について
Javaの初学関連で資料をまとめたメモです。
バージョンはMaven3になります。

# 公式
[Maven – Welcome to Apache Maven](https://maven.apache.org/)

# 読み方
Apache Maven （アパッチ メイヴン／メイヴェン）
(読み方を最初アメコミの MARVEL 的なマーベンかと思ってた)

# ユーザー設定の追加
[Maven – Settings Reference](https://maven.apache.org/settings.html)

## settings.xml 配置場所
### Windows
`C:\Users\user\.m2` 以下に `settings.xml` を追加する。

## プロキシ設定

プロキシ環境下の場合 `settings.xml` に以下のような設定を追加する。

```xml:プロキシ設定例
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <proxies>
        <proxy>
            <id>proxy-http</id>
            <active>true</active>
            <protocol>http</protocol>
            <host>proxy.exsample.com</host>
            <port>8080</port>
            <!--<username></username>-->
            <!--<password></password>-->
        </proxy>
        <proxy>
            <id>proxy-https</id>
            <active>true</active>
            <protocol>https</protocol>
            <host>proxy.exsample.com</host>
            <port>8080</port>
            <!--<username></username>-->
            <!--<password></password>-->
        </proxy>
    </proxies>
</settings>
```

[java - 社内環境におけるmavenのプロキシ認証エラーについて - スタック・オーバーフロー](https://ja.stackoverflow.com/questions/22073/%E7%A4%BE%E5%86%85%E7%92%B0%E5%A2%83%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bmaven%E3%81%AE%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E8%AA%8D%E8%A8%BC%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)

## アプリケーションサーバー設定を追加

Tomcatなどのアプリケーションサーバーの設定例

```xml:デプロイ先のサーバー設定追加例
    <servers>
        <server>
            <id>localhost</id>
            <username>user</username>
            <password>pass</password>
        </server>
    </servers>
```

[[Windows][IntelliJ][Java][Tomcat] IntelliJでTomcat9の環境を作成する - Qiita](http://qiita.com/koara-local/items/2ee748aeb05ee538129f)

# archetypeから環境を生成する
## シンプルな構成（JavaのMain Class + JUnit の構成）を生成する
基本的には、`org.apache.maven.archetypes` の `maven-archetype-quickstart` を使用すれば良いと思います。
main関数とJUnitの設定まで含まれているarchtypeです。

ただしJUnitは3.8.1と古いので、4.x系か5.x系に上げたほうが良いかもしれないです。

[Maven Repository: junit » junit](https://mvnrepository.com/artifact/junit/junit)

## コマンドラインでの実行

```console:mvnの実行例
$ mvn archetype:generate \
  -DarchetypeGroupId=org.apache.maven.archetypes \
  -DarchetypeArtifactId=maven-archetype-quickstart \
  -DinteractiveMode=false \
  -DgroupId=${groupId} \
  -DartifactId=${artifactId}
```

# その他・プラグイン
## Javaのコンパイルバージョンを明示的に指定

`maven-compiler-plugin` を使用する。

```xml:pom.xml
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.6.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
    </plugins>
  </build>
```
[Apache Maven Compiler Plugin – Introduction](https://maven.apache.org/plugins/maven-compiler-plugin/)
[Maven Repository: org.apache.maven.plugins » maven-compiler-plugin](https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin)

[How to change Java version for Maven in IntelliJ? - Stack Overflow](https://stackoverflow.com/questions/25888023/how-to-change-java-version-for-maven-in-intellij)
[herokuのpushでJavaのCompilerがversion 1.5になってラムダ式を使うとコンパイルエラーが発生するときの対処方法 - Qiita](http://qiita.com/gosshys/items/991fc23484ecddbc3c0c#_reference-f249a6195385845f0b6a)

## Mavenからプログラムの実行

[Java プログラムを Maven から実行する方法 - Qiita](http://qiita.com/hide/items/0c8795054219d04e5e98)

コマンドラインに `exec:java` を追加する

## jarファイルをライブラリも含めて一つにまとめる
外部依存jarも含めて一つのjarファイルにまとめたい場合 `Maven Assembly Plugin` を使用すると良いらしい

[Maven Assembly Plugin で外部依存 jar をまとめる - A Memorandum](http://etc9.hatenablog.com/entry/20101210/1291996946)

# IDE付属のMavenを使う場合
## IntelliJ IDEA
### Windows
以下あたりにMavenの実行バイナリが存在しているのでここにPATHを通す。

```
C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.1.2\plugins\maven\lib\maven3\bin
```

# マルチ構成プロジェクトの場合
[マルチモジュール構成プロジェクト用実行時オプション · Maven3のはじめかた](https://kengotoda.gitbooks.io/what-is-maven/content/module/option.html)

# 参考
[Maven – Welcome to Apache Maven](https://maven.apache.org/)
[Maven3 チュートリアル](http://sambatriste.github.io/maven3-tutorial/)