システム開発現場の道具箱

株式会社モノクレアが運営するIT技術系のブログです。システム開発の現場で役に立つ情報を掲載しています。

独習Maven 《基本編》

ここでは独習Mavenと銘打ち、Mavenの実行方法について解説します。
Mavenを目的ごとに使用することで、理解を深めて貰えたらと思います。

まず今回は基本編として、以下を目的に実施していきます。

  • Mavenコマンドを実行する
  • Javaファイルをコンパイルする
  • Javaクラスをテストする
  • ライブラリを追加する

準備

事前準備として以下の手順に沿って、JDKとMavenをインストールします。

Windows

JDK 以下のサイトからJDKのインストーラーをダウンロードし、実行します。

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Maven(Eclipseを使用する場合は不要) 以下のサイトからMavenのzipファイルをダウンロードし、任意のディレクトリに解凍します。

https://maven.apache.org/download.cgi

コマンドプロンプトを管理者モードで起動し、以下のコマンドを実行します。

setx JAVA_HOME "<JDKのインストール先ディレクトリ>" -m
setx MAVEN_HOME "<Mavenの解凍先ディレクトリ>" -m
setx PATH "%PATH%;%MAVEN_HOME%¥bin" -m

コマンドプロンプトで「mvn -version」コマンドを実行し、Mavenのバージョン情報が表示されることを確認します。

> mvn -version
Apache Maven 3.3.x (xxxxxxxx; yyyy-MM-dd hh:mm:ss tz)
Maven home: /e/t/c
Java version: 1.8.x_xx, vendor: Oracle Corporation
Java home: /e/t/c
Default locale: ja_JP, platform encoding: MS932
OS name: "your os name and version"

Mac OS X

JDK ターミナルで以下のコマンドを実行します。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install caskroom/cask/brew-cask
brew tap caskroom/versions
brew cask install java

Mavenターミナルで以下のコマンドを実行します。

brew install maven

「mvn -version」コマンドを実行し、Mavenのバージョン情報が表示されることを確認します。

> mvn -version
Apache Maven 3.3.x (xxxxxxxx; yyyy-MM-dd hh:mm:ss tz)
Maven home: /e/t/c
Java version: 1.8.x_xx, vendor: Oracle Corporation
Java home: /e/t/c
Default locale: ja_JP, platform encoding: UTF-8
OS name: "your os name and version"

Mavenコマンドを実行する

まず始めにMavenの実行方法を説明します。 Mavenは、pom.xmlのあるディレクトリでmvnコマンドを使って実行します。 pom.xmlはMavenの振る舞いを定義する設定ファイルです。 それでは早速実行してみましょう。 まず、myprojectディレクトリにpom.xmlファイルを作成します。

myproject
    pom.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>a.b.c</groupId>
  <artifactId>myproject</artifactId>
  <version>0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

</project>

最後に、コンソール(Windowsではコマンドプロンプト、Macではターミナル)を開き、 myprojectディレクトリで以下のコマンドを実行します。

cd <myprojectのパス>
mvn package

コンソールに以下の様なログが表示されます。 「BUILD SUCCESS」が表示されたらmvnコマンドの実行は成功です。

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myproject 0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]   :
[INFO]   :
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ myproject 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO]   :
[INFO]   :

mvnコマンド実行後のディレクトリ階層は以下の様になります。

myproject
|   pom.xml
|
\---target
        myproject-0.1-SNAPSHOT.jar

Javaファイルをコンパイルする

続いてmavenを使ってjavaファイルをコンパイルしてみましょう。 myprojectディレクトリに以下の構成でjavaファイルを作成します。

myproject
|   pom.xml
|
\---src
    \---main
        \---java
                A.java

A.javaファイルには以下のソースを記述します。

public class A {

    public static void main(String[] args) {
        System.out.println("Hello Maven!");
    }

}

myprojectディレクトリで以下のコマンドを実行します。

mvn compile
java -cp target/classes A

「BUILD SUCCESS」が表示されたらmvnコマンドの実行は成功です。 javaコマンド実行後、コンソール上には「Hello Maven!」が出力されます。
続いてjarファイルにパッケージングしてみましょう。

mvn package
java -cp target/myproject-0.1-SNAPSHOT.jar A

同じく「BUILD SUCCESS」、「Hello Maven!」が表示されれば成功です。 mvnコマンド実行後のディレクトリ階層は以下の様になります。

myproject
|   pom.xml
|
\---src
|   \---main
|       \---java
|               A.java
|
\---target
    |   myproject-0.1-SNAPSHOT.jar
    |
    \---classes
           A.class

Javaクラスをテストする

junitを用いてjavaクラスをテストしてみましょう。 myprojectディレクトリに以下の構成でATest.javaファイルを作成します。

myproject
|   pom.xml
|
\---src
    \---main
    |   \---java
    |           A.java
    |
    \---test
        \---java
                ATest.java

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>a.b.c</groupId>
  <artifactId>myproject</artifactId>
  <version>0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

次にATest.javaファイルを開き以下のソースを記述します。

import static org.junit.Assert.*;
import org.junit.Test;


public class ATest {

    @Test
    public void test() {
        System.out.println("Hello Maven Test!");
    }
}

myprojectディレクトリで以下のコマンドを実行します。

mvn test

「BUILD SUCCESS」が表示された後、以下のとおりテスト結果が表示されれば成功です。

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

Running ATest
Hello Maven Test!
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.121 sec

Results :

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

mvnコマンド実行後のディレクトリ階層は以下の様になります。

myproject
|   pom.xml
|
\---src
|   \---main
|   |   \---java
|   |           A.java
|   |
|   \---test
|       \---java
|               ATest.java
|
\---target
    |    myproject-0.1-SNAPSHOT.jar
    |
    \---classes
    |       A.class
    |
    \---test-classes
            ATest.class

ライブラリを追加する

次に外部ライブラリを追加してみましょう。 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>a.b.c</groupId>
  <artifactId>myproject</artifactId>
  <version>0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <dependencies>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.4</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <properties>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
  </properties>

</project>

次にA.javaファイルを開き以下のとおりソースを編集します。

import org.apache.commons.lang3.StringUtils;

public class A {

    public static void main(String[] args) {
        System.out.println(StringUtils.join("Hello", "Maven"));
    }

}

myprojectディレクトリで以下のコマンドを実行します。

mvn package
mvn dependency:copy-dependencies -DoutputDirectory=target/lib -DincludeScope=compile
java -cp target/lib/commons-lang3-3.4.jar;target/myproject-0.1-SNAPSHOT.jar A
#Macの場合は以下を実行します。
java -cp target/lib/commons-lang3-3.4.jar:target/myproject-0.1-SNAPSHOT.jar A

「BUILD SUCCESS」、「HelloMaven」が表示されれば成功です。 mvnコマンド実行後のディレクトリ階層は以下の様になります。

myproject
|   pom.xml
|
\---src
|   \---main
|   |   \---java
|   |           A.java
|   |
|   \---test
|       \---java
|               ATest.java
|
\---target
    |   myproject-0.1-SNAPSHOT.jar
    |
    \---classes
    |        A.class
    |
    \---test-classes
    |        ATest.class
    |
    \---lib
            commons-lang3-3.4.jar

基本編は以上です。 次回は応用編①としてプラグインの追加を行います。