Mavenを用いたサイト構築
Mavenではデフォルトのゴールとしてプロジェクトのためのサイトを生成する機能を備えています。サイトではプロジェクトの紹介から、JavaDoc、前節で取り上げた単体テストの結果など、実にさまざまな情報が載せられています。非常に網羅的な情報を備えたサイトを自動で生成してくれるので、多くのプロジェクトではほとんどカスタマイズなしに流用できるでしょう。
では、早速サイトを生成したいと思います。以下のようにゴールを指定してください。
>cd c:\dev\sample >maven site ... BUILD SUCCESSFUL Total time: 5 minutes 51 seconds Finished at: Mon Sep 19 01:02:43 JST 2005
サイトは「プロジェクトルート\target\docs」以下に生成されています。早速webサーバに配置してどのようなサイトが出来上がったか見てみましょう。
ここではApacheサーバ(C:\直下にインストールしてあると仮定)を使い、「プロジェクトルート\target\docs」以下を「C:\Apache Group\Apache2\htdocs」ディレクトリにコピーし、「http://localhost/docs/index.html」にアクセスしました。
また、前節の単体テストの最新の結果についても見ることができます。「http://localhost/docs/junit-report.html」にアクセスしてみてください。
サイト左のメニューを見てもお分かりのとおり、非常に多くの情報を備えたサイトが自動生成されます。このサイト自動生成能力はMavenのもっとも強力な機能の一つといえるでしょう。
このサイトに載せられる情報の中で、プロジェクトにかかわる部分については「project.xml」を編集することで簡単に変更できます。サンプルにあわせて、以下の値を、自分のプロジェクトに合わせて設定してみてください。
要素名 | 親要素 | 説明 |
<name> | <project> | プロジェクトの名前。ページのタイトルなどに使われる。 |
<description> | <project> | プロジェクトの詳しい説明。説明文の中でHTMLタグが使える。サイトのトップページに載せられる。 |
<url> | <project> 、<organization> | プロジェクトや組織のホームページのURL。 |
<logo> | <project> 、<organization> | プロジェクトや組織のロゴイメージがあるURL。 |
<issueTrackingUrl> | <project> | プロジェクトのバグ追跡システム(Bugzillaなど)のURL。 |
<inceptionYear> | <project> | プロジェクトの発足年。ページのコピーライト(例:c 2002-2005, Wings Project)の表示に使われる。 |
<mailingLists> | <project> | プロジェクトのメーリングリスト。複数の<mailingList> 要素を含み、その中に各々のメーリングリストの参加、辞退、投稿アドレスなどを記述する。サイトのメーリングリストの項目に載せられる。 |
<developers> | <project> | プロジェクトの開発者。複数の<developer> 要素を含み、その中に各々の開発者の名前、所属組織、連絡先などを記述する。サイトにプロジェクトメンバとして紹介される。 |
<contributors> | <project> | プロジェクトの貢献者。複数の<contributor> 要素を含み、その中に各々の貢献者の名前、所属組織、連絡先などを記述する。サイトにプロジェクトメンバとして紹介される。 |
<organization> | <project> | プロジェクトを進めている組織。組織の名前やURL、ロゴといった情報を含む。サイトに組織とのリンクを作る。 |
<licenses> | <project> | プロジェクト固有のライセンス。複数の<license> 要素を持ち、その中にライセンス名、ライセンスのテキストデータのあるURL、ライセンスの配布方法を定義している。 |
例として、組織のロゴと組織のホームページへのリンクを設定してみましょう。例では「wings.png」という名前で保存されたロゴを使用します。デフォルトでは、ロゴを配置するディレクトリは「プロジェクトルート\target\docs\images\logos」(サーバ上では「http://localhost/docs/images/logos/」)直下なので、「project.xml」を以下のように記述し、左記の要領で再度サイトを生成します。その上で、「プロジェクトルート\target\docs\images\logos」ディレクトリに「wings.png」ファイルを追加し、webサーバに配置してください。
<project> ... <organization> <name>Wings Project</name> <url>http://www.wings.msn.to/</url> <logo>http://localhost/docs/images/logos/wings.PNG</logo> </organization> ... </project>
再度「http://localhost/docs/index.html」にアクセスすると、次のようにロゴが表示されることがわかります。
以上で、Mavenのサイト自動生成を用いたプロジェクト内での情報共有化を確認しました。
maven.docs.outputencoding=UTF-8
プロパティ値 | 説明 | デフォルト |
maven.docs.dest | 自動生成したサイト用のHTMLファイルを置く場所。 | 「プロジェクトルート\target\docs」 |
maven.docs.omitXmlDeclaration | 自動生成されたドキュメントが「<?xml version="1.0"?>」というxmlファイルである宣言を持つかどうか。 | false |
maven.docs.outputencoding | ドキュメントの自動生成に使う文字コード。 | ISO-8859-1 |
maven.gen.docs | サイト用にHTML変換されるxmlファイル等のファイルが保持されるディレクトリ。 | 「プロジェクトルート\target\generated-xdocs」 |
MavenとSCMとの連携
では、最後にMavenとSCMの連携について説明します。SCMとはSource Code Managementの略で、ソースコードを管理するためのシステムの総称となります。SCMの中でも、今回はCVS(Concurrent Versions System:バージョン管理システム)との連携を行います。開発プロジェクトにCVSを活用することで、開発者は常に最新のソースコードに対して開発作業を行うことができます。また、複数のメンバとの開発作業が並行する中で、自分が作業している間に他の開発メンバが作業内容を更新してしまうような場面においても、自分の開発作業を安心して最新版へ反映させられるよう管理してくれます。
CVSのインストール、設定などについては、ここでは詳しく扱いませんが、次のような設定を想定し、以降の説明を行います。この設定では、プロジェクトで共有するソースコードが「C:\env\cvsnt\cvsrep」をCVSルートとして管理している設定になっています。
項目 | 設定内容 |
CVSサーバ | CVSNT 2.5.02(http://www.march-hare.com/cvspro) |
サーバポート | 2401 |
Location | C:/env/cvsnt/cvsrep |
Name | /env/cvsnt/cvsrep |
今回はMavenに用意されているゴールを用いて、開発メンバがCVSから最新の開発ソースコードを取得できるようにします。
前準備として、以下のようにサンプルをCVSに登録(import)します。
>cd c:\dev\sample >set CVSROOT=:local:C:\env\cvsnt\cvsrep >cvs import -m "maven sample" sample cvsuser sample_1_0 N sample/project.properties N sample/project.xml ... No conflicts created by this import
では、「project.xml」にプロジェクトで使うCVSを設定しましょう。先の設定に基づき、以下のように編集します。
<repository> <connection>scm:cvs:pserver:cvsuser@localhost:2401/env/cvsnt/cvsrep:sample</connection> <developerConnection>scm:cvs:pserver:cvsuser@localhost:
2401/env/cvsnt/cvsrep:sample</developerConnection> </repository>
CVSに接続するための接続名は次のような構文になっています。
scm:cvs:[接続するプロトコル]:[接続するユーザ名]@[ホスト名]:[ポート番号][「表:CVSの設定」にあるNameの値]:
[扱うモジュール名(プロジェクト名)]
初めて開発に参加する人が最新の開発ソースコードを得るためには、通常のCVSコマンドやCVSクライアントツールを用いて取得するのが一般的ですが、既に「project.xml」を取得している場合、以下のように操作することで、「プロジェクトルート\target\checkouts」以下に最新のソースコードを得ることができます。
>cd c:\dev\sample >maven scm:checkout-project ... build:start: scm:parse-connection: [echo] Using connection: scm:cvs:pserver:cvsuser@localhost:2401/env/cvsnt/cv srep:sample Using SCM method: cvs Using CVSROOT: :pserver:cvsuser@localhost:2401/env/cvsnt/cvsrep Using module: sample ... [mkdir] Created dir: C:\dev\sample\target\checkouts\sample ... BUILD SUCCESSFUL Total time: 17 seconds Finished at: Mon Sep 19 12:56:36 JST 2005
ここで得られたソースを自分の作業ディレクトリに上書きすることで、ソースコードが最新のものになります。また、開発途中で他の開発者によって最新のソースコードが変更された場合、次のように操作し、自分のソースを最新にします(例では「プロジェクトルート\src\java\project\wings\SampleMain.java」が書き換えられたという想定です)。
>cd c:\dev\sample >maven scm:update-project ... Using SCM method: cvs Using CVSROOT: :pserver:cvsuser@localhost:2401/env/cvsnt/cvsrep Using module: sample ... scm:cvs-update-project: [cvs] ? target/checkouts [cvs] U src/java/project/wings/SampleMain.java BUILD SUCCESSFUL Total time: 7 seconds Finished at: Mon Sep 19 12:40:02 JST 2005
なお、CVSへの接続にデフォルトで「.cvspass」ファイルを使います。今回のサンプルにあわせた「.cvspass」ファイルの例を載せますので、環境に合わせて編集し、「ユーザホーム」ディレクトリ直下に配置してください。
:pserver:cvsuser@localhost:2401/env/cvsnt/cvsrep:sample
以上、MavenとCVSの連携について説明しました。プロジェクト全体で共有するSCMの情報を「project.xml」で管理できることがお分かりいただけたでしょう。
まとめ
今回は、sampleプロジェクトを利用し、プロジェクトで用いる開発環境を4つの段階に分けて構築していきました。
まずは、Mavenのプロジェクト新規生成するゴールを用いてプロジェクトの作業ディレクトリなどを構築しました。次に、Mavenの単体テストを行うためのゴールを用いて、品質を確保する開発スタイルを構築しました。3番目に、プロジェクトの現在の状態や「project.xml」にあるプロジェクトの情報を使い、プロジェクト用のwebサイトを構築、情報の共有化を進めました。最後にCVSとの連携をもちいて、開発ソースコードを管理できるようにしました。
大部分の機能がMavenに標準として備えられており、非常に簡単に開発プロジェクトの準備を進められたと思います。Mavenにはここで紹介した機能だけではなく、たくさんの機能を標準で、あるいは外部プラグインとして提供しています。ぜひ、あなたのプロジェクトにもMavenを活用してみてください。
参考資料
- Apache Maven Project
- 『Java基本API+Jakarta逆引きリファレンス』(第10章 テスティングフレームワーク) WINGSプロジェクト・山田祥寛 著、技術評論社、2004年4月
- The Essence of Programming 『CVSの基礎練習』 結城浩 著