よく使うMavenコマンド集

仕事上によく使うMavenのコマンド集を整理しました。

##検証環境
・macOS Sierra
・java version 1.8.0_111
・Apache Maven 3.3.9 

##コマンド集

###Mavenのインストール
tarファイルを解凍し、PATHに追加するためにbash_profileにM3_HOMEを追記する。

```bash
$ tar xzvf apache-maven-3.3.9-bin.tar 
$ vi ~/.bash_profile
```
```bash:bash_profile
export M3_HOME=/Users/local/apache-maven-3.3.9
M3=$M3_HOME/bin
export PATH=$M3:$PATH
```
インストール後の確認

```bash
$ mvn --version
```

###雛形プロジェクトの作成。

```bash
$ mvn -B archetype:generate \
 -DarchetypeGroupId=org.apache.maven.archetypes \
 -DgroupId=com.myapp \
 -DartifactId=myapp
```
または`mvn archetype:generate`で対話式でプロジェクト新規作成できる。

```bash
$ mvn archetype:generate

Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 923: 
Choose org.apache.maven.archetypes:maven-archetype-quickstart version: 
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6: 
Define value for property 'groupId': : com.myapp
Define value for property 'artifactId': : myapp
Define value for property 'version':  1.0-SNAPSHOT: : 
Define value for property 'package':  com.myapp: : 
Confirm properties configuration:
groupId: com.myapp
artifactId: myapp
version: 1.0-SNAPSHOT
package: com.myapp
 Y: : 
```

###プロジェクト検証
コンパイルを実行せず、プロジェクトに誤りがないかをチェックする。

```bash
$ mvn validate
```

###コンパイル
プロジェクトをコンパイルする

```bash
$ mvn compile
```

コンパイル時JDKバーションまたは、JVMオプションを指定する場合、pom.xmlに以下の情報を追記する。

```xml:pom.xml
<project>
  ...

  <build>
    <plugins>
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.3</version>
          <configuration>
              <source>1.8</source>
              <target>1.8</target>
              <encoding>UTF-8</encoding>
              <compilerArgs>
                  <arg>-g</arg>
                  <arg>-Xlint</arg>
              </compilerArgs>
          </configuration>
      </plugin>
    </plugins>
  </build>

</project>
```

###テストの実行
Junitテストクラスの実行

```bash
$ mvn test
```

特定のクラスのみテストを実行する。

```bash
$ mvn test -Dtest=BlogicTest
```

特定のクラス、特定メソッドのみテストを実行する。

```bash
$ mvn test -Dtest= BlogicTest#blogicTest1
```

ワイルドカードを使って対象となるテストクラスを一括実行する。

```bash
$ mvn test -Dtest=Blogic*Test
```

###パッケージ生成
JAR、WAR等の成果物を生成する。
packageを実行すればvaliate、compile、test、packageのフェーズも実行される。

```bash
$ mvn package
```
テストコードの実行をスキップし、JARを生成する。

```bash
$ mvn package -DskipTests
```

テストコードのコンパイル、およびテストの実行をスキップする。

```bash
$ mvn package -Dmaven.test.skip
```



###インストール
JARをローカルリポジトリにインストールする。

```bash
$ mvn install
```

サードパーティJARをローカルリポジトリにインストールする。

```bash
mvn install:install-file -Dfile=target/foo.jar -DgroupId=com.foo -DartifactId=foo \
-Dversion=1.0 -Dpackaging=jar -DgeneratePom=true
```

テストコードの実行をスキップする。

```bash
$ mvn install -DskipTests
```

テストコードのコンパイル、およびテストの実行をスキップする。

```bash
$ mvn install -Dmaven.test.skip
```

###デプロイ

パッケージをリモートリポジトリに登録する。
deployを実行すれば、その前のフェーズが全部実行される。

```bash
$ mvn deploy
```

###Clean
targetディレクトリを削除する。

```bash
$ mvn clean
```

package、installの先に実行するのは一般的です。

```bash
$ mvn clean package
$ mvn clean install
```

###情報表示
プロジェクトが持つ依存関係をtreeで表示する。

```bash
$ mvn dependency:tree
```

デフォルト設定を含め、pomファイルの情報を表示する。

```bash
$ mvn help:effective-pom
```
デフォルト設定を含め、設定ファイルの情報を表示する。

```bash
$ mvn help:effective-settings
```

###ANT用build.xmlの生成
`maven-ant-plugin`を利用して、ant用build.xmlを生成する。

```bash
$ mvn ant:ant
$ tree
.
├── build.xml
├── maven-build.properties
├── maven-build.xml
├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── com
    │           └── myapp
    │               └── App.java
    └── test
        └── java
            └── com
                └── myapp
                    └── AppTest.java
```

###Eclipse用プロジェクトの生成

`maven-eclipse-plugin`を利用して`.project`、`.classpath`が生成され、Eclipseでインポートできるようになる。

```bash
$ mvn eclipse:eclipse
```

###ライブラリの出力
`dependency-maven-plugin`を利用し、依存するライブラリを特定のディレクトリにコピーする。

```bash
$ mvn dependency:copy-dependencies -DoutputDirectory=lib
```

###アセンブリの出力
`maven-assembly-plugin`を利用して、ビルド済みのプロジェクトから実行可能Jar（アセンブリ）を作成する。

```bash
$ mvn assembly:assembly -DdescriptorId=bin
```

###Javadoc
Javadocを生成する。

```bash
$ mvn javadoc:javadoc
```

###ライブラリソース
依存しているライブラリのソースを出力する。

```bash
$ mvn dependency:sources
```