コマンドでMavenプロジェクトを作ります

Mavenは、コマンドを使って簡単にJavaやScalaいるんなプロジェクトの作成、Jarのビルドが行なえます。
Mavenのメリットは、プロジェクトのビルドに依存するさまざまなライブラリやリソースを管理してくれることができます。

#Mavenプロジェクトの構造
代表的なMavenプロジェクトの構造は以下の通りになります。
MavenProject
┣━src
┃ ┣━main 
┃ ┃ ┣━java
┃ ┃ ┗━resource
┃ ┗━test
┃   ┣━java
┃   ┗━resource
┗━pom.xml

#Mavenプロジェクト作成
ローカル上、Mavenのコマンドで必要になったディレクトリを作成することができます。
例えば、MvnJavaプロジェクトを作ります。

```
cd /work
mvn archetype:generate \
  -DarchetypeArtifactId=maven-archetype-quickstart \
  -DinteractiveMode=false \
  -DgroupId=com.demo \
  -DartifactId=MvnJava
```
作成されたディレクトリは以下の通り。
MvnJava
┣━src
┃ ┣━main 
┃ ┃ ┣━java
┃ ┃ ┃ ┗━main
┃ ┃ ┃  　 ┗━java
┃ ┃ ┃    　　 ┗━com
┃ ┃ ┃      　　　 ┗━domo
┃ ┃ ┃       　　　　 ┗━App.java
┃ ┃ ┗━resource
┃ ┗━test
┃   ┣━java
┃   ┃  ┗━java
┃   ┃ 　  ┗━com
┃   ┃   　　  ┗━domo
┃   ┃        　　　 ┗━AppText.java
┃   ┗━resource
┗━pom.xml
App.javaの中身は以下

```
package com.demo;
/**
 * Hello world!
 *
 */
public class App
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
    }
}
```
AppTest.javaの中身は以下

```
package com.demo;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
 * Unit test for simple App.
 */
public class AppTest
    extends TestCase
{
    /**
     * Create the test case
     *
     * @param testName name of the test case
     */
    public AppTest( String testName )
    {
        super( testName );
    }
    /**
     * @return the suite of tests being tested
     */
    public static Test suite()
    {
        return new TestSuite( AppTest.class );
    }
    /**
     * Rigourous Test :-)
     */
    public void testApp()
    {
        assertTrue( true );
    }
}
```
#pom.xmlの編集
pomとは、「project object model」の略で、プロジェクトのさまざまな情報を扱うためのオブジェクトモデルです。pom.xmlでは、プロジェクトの設定をxmlのタグとして記述していきます。
今度、JUnitテストを行うために、テストに依存するライブラリを追加します。

```
<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.demo</groupId>
  <artifactId>MvnJava</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>MvnJava</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
</project>
```

#Mavenプロジェクトのコンパイル
Mavenプロジェクトをコンパイルします。

```
cd /work/MvnJava
mvn compile
#下の結果が表示されたらコンパイル完了
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
```
targetディレクトリが作成されます。

JUnitテストに依存するJarは以下の場所に置かれてあります。

```
ls /Users/username/.m2/repository/junit/junit/3.8.1/
junit-3.8.1.jar	
```
#JUnitの実施

```
mvn test
#結果
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.demo.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.01 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19.083 s
[INFO] Finished at: 2019-03-21T16:59:50+09:00
[INFO] ------------------------------------------------------------------------
```
#Jarのビルド

```
mvn package
#結果
[INFO] Building jar: /work/MvnJava/target/MvnJava-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.768 s
[INFO] Finished at: 2019-03-21T17:12:01+09:00
[INFO] ------------------------------------------------------------------------
```
MvnJava-1.0-SNAPSHOT.jarは、ビルドできたJarです。

#Jarの実行

```
java -cp /work/MvnJava/target/MvnJava-1.0-SNAPSHOT.jar com.demo.App 
#結果
Hello World!
```

#Mavenよく使うコマンド
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||
|:-----------|:----|
|mvn -v：     |Mavenバージョンを確認します。利用中のJDKの情報も含めます。|
|mvn compile：|Maven内の項目をコンパイルします。Mavenディレクトリの直下にtargetディレクトリが生成されます。その中にクラスが置かれているclassesディレクトリなどが作成されています。|
|mvn test：   |Mavenのテストを実行します。そのためには、Targetディレクトリの中にテスト用のクラスとテスト結果を作成されます。|
|mvn package：|Mavenプロジェクトをコンパイルして、targetディレクトリにビルドします。|
|mvn clean：  |targetディレクトリを削除します。|
|mvn install：|ローカルリポジトリにインストールする。|