Apache Maven を使ってみよう(その 1)
当ブログではこれまで Apache Maven (以下、Maven) の話題は極力避けてきたが、昨今の開発事情を鑑みるに、最早 Maven なしでは開発がままならない状況になりつつある。Spring MVC では標準のビルドツールとして採用されるなど、Maven は避けては通れないものになっている。
Maven はなぜ便利なのか ?
ビルドライフサイクルの自動化
IDE を使っているとあまりピンと来ないかも知れないが、たくさんの Java のソースコードを一つ一つ手でコンパイルするのは大変な作業である。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] を押す。
めでたくプロジェクトが取り込めた。が、何やら警告が出ていますね。
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>
修正内容としては
といったところ。この内容で保存すると程なくしてエラーが出るが、これは「pom.xml
の内容が反映されてないよ !」ということなので、最新の内容を反映させればよい。
Alt + F5 を押すとこのような画面が出てくるので「MavenSample」にチェックを入れて [OK] を押す。
更新されたプロジェクトはこのようになっているはず。エラーが消えて J2SE-1.5 から JavaSE-1.8 に、依存ライブラリも junit-4.12.jar
と hamcrest-core-1.3.jar
に変わっている。
ここで不思議なのが、依存するライブラリとしては junit-4.12
しか指定していないのに勝手に hamcrest-core-1.3
が追加されていること。これは JUnit 4 が内部的に hamcrest-core
を使うことが Maven リポジトリに書かれていて、依存ライブラリとして自動で引っ張ってきてくれているのだ。