Wikipediaには次のように記載されています。

Apache Maven(メイヴン / メイヴェン)は、Java用プロジェクト管理ツールである。Apache Antに代わるものとして作られた。
ソースコードのコンパイル、テスト、Javadoc生成、テストレポート生成、プロジェクトサイト生成、JAR生成、サーバへのデプロイ、WAR, EARファイル生成など様々な機能が用意されている。
参考: https://ja.wikipedia.org/wiki/Apache_Maven

Mavenは主にJavaプロジェクトにおいて、ソースコードのコンパイル、テスト、依存ライブラリ等、プロジェクトを管理をするために使われるOSSです。同じようなものとしてGroovyで書かれたGradleがあります。

よくある不毛な議論としてMavenとGroovyが比較されることがありますが、どちらも同じようなことができるので自分に合う方を使えばいいです。MavenはXMLファイルで記述し、Gradleはスクリプト言語で記述できます。プロジェクトに数人だけ管理できる人がいれば十分なのでどちらか一方を知っておけばよいです。両方わかるのが理想ですが。。

あくまでも依存するパッケージを管理したりテストを実行したりするものです。本番環境へコードをデプロイするような機能もありますが、なんでもかんでもMavenやGroovyに詰め込むのではなく、専用のツールに頼ったほうが良い場合もあります。昨今、CI/CDツールなど便利で融通の効くものがたくさんあるので、他のツールでできるところは専門のツールに任せましょう。

intellijやeclipse等のIDEにプラグインとして組み込まれているので黒い画面からコマンドを叩くことは少ないのかな(?)。自分はコンソールからmvnコマンドを叩く派です。

インストール

JDK8とMavenをダウンロードしてインストールします。Mavenはパスの設定が必要です。

JDK8インストール

$ cd /tmp
$ wget --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-cookie" \
http://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.rpm
$ sudo yum install jdk-8u73-linux-x64.rpm -y
$ java -version
versionが表示されればOK

Mavenインストール

$ wget http://ftp.jaist.ac.jp/pub/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
$ tar zxfv apache-maven-3.3.9-bin.tar.gz
$ sudo mv apache-maven-3.3.9 /usr/local
$ sudo vi /etc/profile
export M3_HOME=/usr/local/apache-maven-3.3.9
M3=$M3_HOME/bin
export PATH=$M3:$PATH
$ . /etc/profile
$ mvn -v
versionが表示されればOK

proxyの設定が必要であれば以下のように設定する。

$ sudo vi /usr/local/apache-maven-3.3.9/conf/settings.xml
<proxy>
<active>true</active>
<protocol>http</protocol>
<host>proxy.hogehoge.jp</host>
<port>8080</port>
</proxy>

プロジェクトの作り方

mavenで用意されている雛形を使うか、1から作るか選べる。雛形を使う場合は以下のようなコマンドを実行すればいい。archetypeArtifactIdは適切なものがあるか調べる必要がある。例えば、Spring-mvnアプリケーションが作りたいってときに指定するarchetypeが用意されているかもしれないので調べてみるといいかも。maven-archetype-quickstartで最低限必要なディレクトリやファイルが生成できる。

$ mvn archetype:generate -DgroupId=tech.ishii.hogehoge \
-DartifactId=sample \
-DarchetypeArtifactId=maven-archetype-quickstart

1から作る場合は以下のようにする。

$ mkdir project-name && cd project-name
$ mkdir -p src/{main,test}/java/tech/ishii/project
$ tree project-name
project-name
|-- pom.xml
`-- src
|-- main
| `-- java
| `-- tech
| `-- ishii
| `-- project
| `-- App.java
`-- test
`-- java
`-- tech
`-- ishii
`-- project
`-- AppTest.java

上のようなディレクトリとファイルを作ります。

プロジェクトの内容を定義するpom.xmlを作成します。
以下はvertx-coreとkafkaを使うプロジェクトのpom.xmlです。必要となるdependencyを以下のように記述することでコマンド1つですべてのファイルがダウンロードできます。

$ vi 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>tech.ishii</groupId>
<artifactId>sample</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-core</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.11</artifactId>
<version>0.9.0.1</version>
</dependency>
<!-- testのdependencyは省略 -->
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

mvnコマンド

pom.xmlの定義が終わったら、mvnコマンドで依存ファイルをダウンロードしたり、テストを実行します。

以下、コマンドの一例を書いておきます。

dependencyをinstallする
$ mvn install

jar/warパッケージを作る
$ mvn clean package

テストを実行する
$ mvn test

テストはファイルを指定して実行できたり、いくつか便利なオプションがあるので調べてみると良いかと思います。

まとめ

効率よく開発したい時にプロジェクト管理ツールは必ず必要なので知っておくといいかもしれません。

参考

  1. https://ja.wikipedia.org/wiki/Apache_Maven
  2. https://maven.apache.org/