Maven を使ってみた

使ってみた時のメモ。
Javaはインストール済み。

# Maven のインストール

[AmazonLinuxにmavenをインストールする](http://saratoga.jp/tips/528)

```bash
$sudo su

$wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo

$ sed -i s/\$releasever/6/g /etc/yum.repos.d/epel-apache-maven.repo

$yum -y install apache-maven

$ mvn --version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T16:41:47+00:00)
Maven home: /usr/share/apache-maven
Java version: 1.7.0_111, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.111.x86_64/jre
Default locale: ja_JP, platform encoding: UTF-8
OS name: "linux", version: "4.4.23-31.54.amzn1.x86_64", arch: "amd64", family: "unix"
```

# 使ってみる

以下に分かりやすくまとまっておりました。

[Maven でプロジェクトの作成からビルド、実行までをやってみた](http://a4dosanddos.hatenablog.com/entry/2015/02/22/163009)

## プロジェクトの作成

```bash
$mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
```

これで Maven パッケージの雛形が出来上がります。
具体的にはこんな感じの構成になります。

```bash
$tree .
.
└── my-app
    ├── pom.xml
    └── src
        ├── main
        │   └── java
        │       └── com
        │           └── mycompany
        │               └── app
        │                   └── App.java
        └── test
            └── java
                └── com
                    └── mycompany
                        └── app
                            └── AppTest.java

12 directories, 3 files
```

こんなコードになってた。

```App.java
package com.mycompany.app;

/**
 * Hello world!
 *
 */
public class App
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
    }
}
```

# pom.xml の編集

mvn コマンドから Java を実行できる便利なプラグイン`exec-maven-plugin`します。
JUnitは最初から入っているのですね。

```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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-app</name>
  <url>http://maven.apache.org</url>

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <configuration>
          <mainClass>com.mycompany.app.App</mainClass>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

</project>
```

# ビルドする

ビルドします。
初回は関係するライブラリのインストールなどもあり、少し時間がかかります。

```bash
$mvn package
・・・

[INFO] Building jar: /home/ec2-user/my-app/target/my-app-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 36.587 s
[INFO] Finished at: 2016-11-11T13:48:28+00:00
[INFO] Final Memory: 15M/36M
[INFO] ------------------------------------------------------------------------
```

できました。
targetフォルダ配下に jarファイルやクラスファイルも確認できますね。

# 実行する

```bash
$mvn exec:java
・・・
Hello World!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.590 s
[INFO] Finished at: 2016-11-11T13:50:14+00:00
[INFO] Final Memory: 6M/15M
[INFO] ------------------------------------------------------------------------
```

出来ました！