第2回 Mavenの導入
今回の内容
前回はMavenとはなにか、という点についてお話しました。今回はMavenを導入して、手軽にMavenを試せるサンプルプロジェクトを作成し、ゴールを実行してみます。
インストール
Mavenの配布バイナリは、Mavenの公式サイト [1] からダウンロードすることが可能です。最新バージョンはつい先日リリースされた1.0です。
Windowsの場合はインストーラが用意されているので、そちらを使用しても構いません。インストーラ以外はアーカイブをダウンロードした後に、適当なディレクトリに展開します。次に環境変数MAVEN_HOMEにインストールディレクトリを設定します。Windowsの場合にはシステム設定で、Unix系の場合にはdotファイル系で設定します。
環境変数の設定後は、ローカルリポジトリの初期化を行います。$MAVEN_HOME/bin/install_repo.(sh|bat)を実行することで、ローカルリポジトリにjarをインストールします。
[Unixの場合] $MAVEN_HOME/bin/install_repo.sh $HOME/.maven/repository [Windowsの場合] %MAVEN_HOME%\bin\install_repo.bat %HOME%\.maven\repository
次に実行パスにMAVEN_HOME/binを追加しておきます。MAVEN_HOMEを使ってパスを設定しておけば、mavenのバージョンが複数混在していても、MAVEN_HOMEを切り換えるだけで利用することができます。パスが設定されたら、mavenコマンドの実行テストをしてみます。コンソールで「maven -v」と実行してみて、mavenが実行され、キャラクターで書かれたロゴ付きのバージョンが表示されればOKです。
mavenコマンド
Mavenはゴールという命令をmavenコマンドのオプションに渡して実行することで、プロジェクトに対してアクションを実施します。前回もお話しましたが、Mavenのゴールは、Antにおけるターゲットに似ています。異なる点は、Antは全てのターゲットを自分で記述しなければなりませんが、MavenはPOMの設定さえしておけば、基本的な部分はそのままでゴールが実行可能な点です。
Mavenで使用可能なゴールは-gオプションでリストアップできます。出力結果が膨大なため、御自分で実行してみてどんなゴールがあるかを調べてみてください。
各ゴールはMavenのプラグインとして提供されています。プラグインは基本的にはAntのタスクを使ったターゲットと考えてよいでしょう。個々のプラグインの詳細はプラグインのプロジェクトサイト [2] を参考にしてください。
genappの実行
さて、簡単にMavenを体験するために、サンプルプロジェクトを作成します。Mavenのサンプルプロジェクトはgenappというゴールを実行することで、簡単に作成できます。
まずテスト用のディレクトリ(ここではtest)を作成し中に移動します。その後に「maven genapp」とコマンドを実行してください。4つの質問がされますが、3つ目まではエンターだけを押します。最後の質問だけ、デフォルトのパッケージ名を使用せずに例えば「example」などと別のパッケージ名を入力します [3] 。
パッケージ名を入力するとgenappが実行され、ディレクトリ内にいくつかのファイルとディレクトリが作成されて終了します。なお、maven実行時は依存関係にあるjarファイルを自動ダウンロードします。その関係上、 インターネットにアクセスできる環境である必要があります。
genappを実行後、testディレクトリ直下には2つのファイルと、1つのディレクトリが生成されています。genappで作成されたproject.xmlとproject.propertiesはサンプルではありますが、そのままでもMavenで動作可能な設定が記述されています。この状態で既にコンパイル、テストの実行、サイトレポートの出力が可能になっています。
[genappで生成されるディレクトリ構成] test |-- project.properties |-- project.xml |-- src |-- conf | `-- app.properties |-- java | `-- example | `-- App.java `-- test `-- example |-- AbstractTestCase.java |-- AppTest.java `-- NaughtyTest.java
初めてmavenコマンドを実行した場合は、genappを実行した際に「commons-jelly-tags-interaction-20030211.143817.jar」のダウンロードを試みています。」とメッセージが表示されたはずです。これは、genappプラグインに依存関係にあるライブラリを取得しているためです。一度取得したjarファイルはキャッシュされるため、次からは取得にいく必要はありません。
ゴールを実行
本来のプロジェクトでは自動生成されたproject.(xml|properties)を元にカスタマイズしていくわけですが、今回はこのまま各種ゴールを実行してみます。
まず最初はコンパイルとテストを実行してみましょう。ソースのコンパイルは「maven java:compile」 [4] 、テストの実行は「maven test」です。antと同様にゴール毎の依存関係がありますので、いきなり「maven test」としてもコンパイルがされていなければ、コンパイルをしてからテストを実行してくれます。
次にsiteゴールを実行してみましょう。siteゴールはプロジェクトの情報をHTMLに変換して、プロジェクトサイトを生成します。siteゴールは多くのゴールに依存しており、実行中は次々と複数のゴールを実行しているのがわかるでしょう。依存関係のためダウンロードするjarファイルも多いため、回線が細い環境の場合は時間がかかるかもしれません。生成されたサイトレポートは、target/docs/に配置されます。
なお筆者の環境では、1.0-rc2でgenappで生成されたプロジェクトに対して「maven site」を実行しようとすると失敗してしまいました。project.xmlのbuild要素の次に、以下の記述をしておけば失敗を回避できます。
[レポートの指定] <reports> <report>maven-jdepend-plugin</report> <report>maven-checkstyle-plugin</report> <report>maven-changes-plugin</report> <report>maven-changelog-plugin</report> <report>maven-developer-activity-plugin</report> <report>maven-file-activity-plugin</report> <report>maven-license-plugin</report> <report>maven-javadoc-plugin</report> <report>maven-jxr-plugin</report> <report>maven-junit-report-plugin</report> <!-- <report>maven-linkcheck-plugin</report> --> <report>maven-tasklist-plugin</report> </reports>
project.xmlはPOM(Project Object Model)に関する設定をしているのみで、実際のゴール固有の設定はありません。MavenはPOMを定義しておくことで、各ゴールが必要な情報をPOMから取得して、各自の処理を実行することになっています。ゴール固有の指定が必要な場合は、project.propertiesに設定を追加します。
今回のまとめと次回予告
今回はMavenのインストールと、genappを利用したサンプルプロジェクトの作成と、mavenのゴール実行を体感してもらいました。次回は生成されたproject.xmlとproject.propertiesについて詳しく見ていく予定です。
[1] | http://maven.apache.org/ |
[2] | http://maven-plugins.sourceforge.jp/ |
[3] | http://maven.apache.org/reference/plugins/index.html |
[4] | 「default」がJavaキーワードのためそのままではコンパイルできないためです |
[5] | mavenは[プラグイン名]:[処理名]のセットでゴールを指定します。 |