SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

Mavenを利用してオールインワンのプロジェクト環境を構築する

Mavenのプロジェクト管理機能の解説と実践例


  • X ポスト
  • このエントリーをはてなブックマークに追加

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」にアクセスしました。

自動生成されたサイト1
自動生成されたサイト1

 また、前節の単体テストの最新の結果についても見ることができます。「http://localhost/docs/junit-report.html」にアクセスしてみてください。

自動生成されたサイト2
自動生成されたサイト2

 サイト左のメニューを見てもお分かりのとおり、非常に多くの情報を備えたサイトが自動生成されます。このサイト自動生成能力はMavenのもっとも強力な機能の一つといえるでしょう。

 このサイトに載せられる情報の中で、プロジェクトにかかわる部分については「project.xml」を編集することで簡単に変更できます。サンプルにあわせて、以下の値を、自分のプロジェクトに合わせて設定してみてください。

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.xml」ロゴの設定
<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」にアクセスすると、次のようにロゴが表示されることがわかります。

自動生成されたサイト3
自動生成されたサイト3

 以上で、Mavenのサイト自動生成を用いたプロジェクト内での情報共有化を確認しました。

補足説明
 ドキュメントの内容、例えばJavaDocなどに日本語を含む場合は、プロジェクトルートにある「project.properties」に以下の一行を追加してください。
「project.properties」
maven.docs.outputencoding=UTF-8
 その他、サイトなどのドキュメント生成にかかわるプロパティ値を表にします。以下の要素を必要な場合は、同様に上記「project.properties」ファイルに追記してください。
サイト自動生成にかかわるプロパティ値
プロパティ値説明デフォルト
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の設定
項目設定内容
CVSサーバCVSNT 2.5.02(http://www.march-hare.com/cvspro)
サーバポート2401
LocationC:/env/cvsnt/cvsrep
Name/env/cvsnt/cvsrep

 今回はMavenに用意されているゴールを用いて、開発メンバがCVSから最新の開発ソースコードを取得できるようにします。

 前準備として、以下のようにサンプルをCVSに登録(import)します。

サンプルのCVSへの登録
>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を設定しましょう。先の設定に基づき、以下のように編集します。

project.xml
<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に接続するための接続名は次のような構文になっています。

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」ファイルの例を載せますので、環境に合わせて編集し、「ユーザホーム」ディレクトリ直下に配置してください。

「.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を活用してみてください。

参考資料

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 渕 幸雄(フチ ユキオ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/177 2006/10/11 19:35

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング