Mavenの基本

Mavenの基本を知っておくということで。

Mavenは「Maven – Welcome to Apache Maven」で開発が進められています。ここから最新版をダウンロードします。本記事執筆時は、apache-maven-3.0.4-bin.tar.gz が最新でした。ちなみに、MacOS X Mountain Lionでは、mvnコマンドもインストールされていてバージョンも3.0.3と新しいものなので、わざわざインストールしなくてもよいかもしれません。

Javaがインストールされていないと動きませんから、あらかじめインストールしておくようにします。バージョンを確認したときに、エラーとなる場合は調査が必要です。

$ mkdir ~/applications
$ tar xzf apache-maven-3.0.4-bin.tar.gz -C ~/applications
$ ~/applications/apache-maven-3.0.4/bin/mvn --version

まず、maven-archetype-quickstartのプロジェクトを生成してみましょう。次のように入力すると、必要なファイルのダウンロードが始まり(~/.m2に保存されます)、アーキタイプのリストが表示されます。デフォルトのまま[Enter]を入力すると、maven-archetype-quickstart が選択されます。素野後、アーキタイプのバージョンはデフォルトのまま、groupIdには org.sssg.soft.example.maven とし、artifactIdには Example、versionはデフォルトのまま、packageもデフォルト( org.sssg.soft.example.maven )と入力します。

$ ~/applications/apache-maven-3.0.4/bin/mvn archetype:generate
(略)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 216: 
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: 
(略)
quickstart/1.1/maven-archetype-quickstart-1.1.pom (2 KB at 37.7 KB/sec)
Define value for property 'groupId': : org.sssg.soft.example.maven
Define value for property 'artifactId': : Example
Define value for property 'version':  1.0-SNAPSHOT: : 
Define value for property 'package':  org.sssg.soft.example.maven: : 
Confirm properties configuration:
groupId: org.sssg.soft.example.maven
artifactId: Example
version: 1.0-SNAPSHOT
package: org.sssg.soft.example.maven
 Y: : Y
[INFO] ----------------------------------------------------

こうすると、下記のようなディレクトリとファイルが生成されます。

.
└── Example
    ├── pom.xml
    └── src
        ├── main
        │   └── java
        │       └── org
        │           └── sssg
        │               └── soft
        │                   └── example
        │                       └── maven
        │                           └── App.java
        └── test
            └── java
                └── org
                    └── sssg
                        └── soft
                            └── example
                                └── maven
                                    └── AppTest.java

これで、App.java に処理を追加すればJavaアプリケーションの開発ができるし、AppTest.java にテストを書けばテストもできます。コンパイルやテストを実行するには次のようにします。

$ ~/applications/apache-maven-3.0.4/bin/mvn compile
$ ~/applications/apache-maven-3.0.4/bin/mvn test

compileやtestを実行すると、下記のようなtargetディレクトリが追加される。リポジトリなどを用意する場合は、このtargetディレクトリは無視するように設定するのが普通だろう。

└── target
    ├── classes
    │   └── org
    │       └── sssg
    │           └── soft
    │               └── example
    │                   └── maven
    │                       └── App.class
    ├── surefire
    ├── surefire-reports
    │   ├── TEST-org.sssg.soft.example.maven.AppTest.xml
    │   └── org.sssg.soft.example.maven.AppTest.txt
    └── test-classes
        └── org
            └── sssg
                └── soft
                    └── example
                        └── maven
                            └── AppTest.class

pom.xmlはProject Object Modelを表現するXMLファイルです。要素は、projectの基礎となるBasicな情報、構築に関するbuild要素、reporting要素、プロジェクトのメタデータ、環境に大きく分類することができます。quickstartでは、Basicな情報しか生成されていませんでした。

<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>org.sssg.soft.example.maven</groupId>
  <artifactId>Example</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>Example</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

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

Apache Maven について知るには、「Apache Maven 3クックブック Javaソフトウェア開発のための特選レシピ集」という書籍もあります。Mavenに興味がある人は、購入を検討してみると良いかも。

同じタグの記事: Java
同じタグの記事: Maven
同じカテゴリの記事: Java
関連書籍: Java