似非プログラマのうんちく

「似非プログラマの覚え書き」出張版

Apache Maven を使ってみよう(その 1)

当ブログではこれまで Apache Maven (以下、Maven) の話題は極力避けてきたが、昨今の開発事情を鑑みるに、最早 Maven なしでは開発がままならない状況になりつつある。Spring MVC では標準のビルドツールとして採用されるなど、Maven は避けては通れないものになっている。

Maven はなぜ便利なのか ?

ビルドライフサイクルの自動化

IDE を使っているとあまりピンと来ないかも知れないが、たくさんの Javaソースコードを一つ一つ手でコンパイルするのは大変な作業である。Maven でプロジェクトを管理しておけば、コマンド一つでコンパイルを含むビルドライフサイクルを全て自動化できる。

依存ライブラリの管理ができる

プロジェクトが依存するライブラリを一つ一つ探してくるのは大変な作業。しかし Maven なら、設定ファイルである pom.xml に記述しておけば Mavenリポジトリから勝手にダウンロードしてくれる。さらに、依存するライブラリが依存する別のライブラリがあれば、ほとんどのケースでそれらも勝手にダウンロードしてくれる。

プラグインによる拡張性

Maven には様々なプラグインがあり、それらを組み込むことで Maven をより使いやすいものに出来る。場合によっては自分でプラグインを作ることも出来る。

Scala や Groovy も O.K.

Maven さえあれば、Java VM 上で動く Scala や Groovy と言った言語での開発も可能。しかも Scala や Groovy を別途インストールする必要がない。

こういった理由により、Maven の使い方を覚えることは非常に有効であり、開発の手間を大いに省くことが可能になる。そこで今回からは Maven の基本的な使い方を連載していこうと思う。

Maven を使う

準備

Java Development Kit (JDK) がインストールされていることが必須である。

以下のサイトから Maven をダウンロードする。
Maven – Welcome to Apache Maven

これを適当なフォルダに解凍し、環境変数の設定を行う。

環境変数 MAVEN_HOME には Maven を解凍したフォルダを指定する。かつては M2_HOME に指定することになっていたが、現在は Eclipse 向けプラグインである Maven EnIDE の関係で MAVEN_HOME に設定する方が良い。

環境変数 PATH に以下を追加する。

;%MAVEN_HOME%\bin

以上の設定が済んだらコマンドプロンプトを立ち上げて mvn -version と入力して Enter を押してみよう。

Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T20:57:37+09:00)
Maven home: C:\Maven\bin\..
Java version: 1.8.0_51, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_51\jre
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"

のように Maven のバージョンや Java のバージョンなどの情報が出てくれば、Maven は正しくインストールされている。

プロジェクトを作る

コマンドプロンプト

mvn archetype:generate -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=jp.mydns.akanekodou -DartifactId=MavenSample

と入力して Enter を押す。一行で打ち込むので少し面倒かも知れない。

途中で何度かプロンプトが出るが、単に Enter を押して進めて良い。

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 33.270 s
[INFO] Finished at: 2015-08-07T10:33:16+09:00
[INFO] Final Memory: 15M/167M
[INFO] ------------------------------------------------------------------------

とメッセージが出てくればプロジェクト作成完了だ。直下に MavenSample というディレクトリが出来ているはずだ。

Eclipse に取り込む

Java 向けの IDE はいろいろあるが、今回は Eclipse について解説する。

まずは Eclipse に、Maven 用のプラグインである m2e をインストールする必要があるが、その手順については割愛する。

Package Explorer で右クリックして [Import...] を選ぼう。

[Existing Maven Projects] を選択して [Next] を押す。

[Root Directory] に先ほど作業したフォルダ名を入れると…

先ほど作ったプロジェクトにチェックマークが入っている。そのまま [Finish] を押す。

めでたくプロジェクトが取り込めた。が、何やら警告が出ていますね。

J2SE-1.5 の JRE がないよ !」という警告である。そりゃそうだ(苦笑)。

pom.xml の修正

この警告を消すには 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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>jp.mydns.akanekodou</groupId>
  <artifactId>MavenSample</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>MavenSample</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>
</project>

これを次のように修正する。

<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>jp.mydns.akanekodou</groupId>
  <artifactId>MavenSample</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>

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

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

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

修正内容としては

  • プロパティ値の設定(文字エンコードUTF-8 に、Java のバージョンを 1.8 に)
  • JUnit のバージョンを最新の 4.12 に

といったところ。この内容で保存すると程なくしてエラーが出るが、これは「pom.xml の内容が反映されてないよ !」ということなので、最新の内容を反映させればよい。

Alt + F5 を押すとこのような画面が出てくるので「MavenSample」にチェックを入れて [OK] を押す。

更新されたプロジェクトはこのようになっているはず。エラーが消えて J2SE-1.5 から JavaSE-1.8 に、依存ライブラリも junit-4.12.jarhamcrest-core-1.3.jar に変わっている。

ここで不思議なのが、依存するライブラリとしては junit-4.12 しか指定していないのに勝手に hamcrest-core-1.3 が追加されていること。これは JUnit 4 が内部的に hamcrest-core を使うことが Maven リポジトリに書かれていて、依存ライブラリとして自動で引っ張ってきてくれているのだ。