Maven2のもう1つの有用な機能として、プロジェクトサイト生成機能があります。
pom.xmlファイルに書かれた各種情報を元に、プロジェクト情報をまとめたサイトを自動生成してくれます。
完全に自動化できる情報は限られていますが、その他の情報に関してもプロジェクト内にファイルを置くことで同じレイアウトのページとして出力ができます。
Maven2のサイトもサイト生成機能を利用して作られています。
それでは基本的な機能を見ていきます。
pom.xmlファイルに書かれた各種情報を元に、プロジェクト情報をまとめたサイトを自動生成してくれます。
完全に自動化できる情報は限られていますが、その他の情報に関してもプロジェクト内にファイルを置くことで同じレイアウトのページとして出力ができます。
Maven2のサイトもサイト生成機能を利用して作られています。
それでは基本的な機能を見ていきます。
siteフェーズ
プロジェクトサイトを生成するために必要な設定は特に必要ありません。pom.xmlファイル
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>st.happy_camper.sample</groupId>
<artifactId>sample-jar</artifactId>
<version>0.0.1-SNAPSHOT</version>
</project>
を準備し、
$ mvn site
で、target/siteに出力されます。
基本情報の設定
基本情報の出力は、maven-project-info-reports-plugin
が行っています。pom.xmlファイルへの設定がない場合には、このプラグインが出力できるレポートをすべて出力します。
出力を抑制したい場合には以下のような設定を行い、必要のない項目の
<report>
タグを削除/コメントアウトしていきます。<project>
・・・・
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<reportSets>
<reportSet>
<reports>
<report>cim</report>
<report>dependencies</report>
<report>dependency-convergence</report>
<report>dependency-management</report>
<report>index</report>
<report>issue-tracking</report>
<report>license</report>
<report>mailing-list</report>
<report>plugin-management</report>
<report>project-team</report>
<report>plugins</report>
<report>scm</report>
<report>summary</report>
</reports>
</reportSet>
</reportSets>
</plugin>
・・・・
</plugins>
</reporting>
・・・・
</project>
各項目で表示される情報には、pom.xmlの設定を利用しているものもあります。
それぞれについて、関連する設定を見てみます。
cim
Continuous Integeration System (継続的インテグレーションシステム : ContnuumやHudsonなど) についてのレポート。pom.xml
<project>
・・・・
<ciManagement>
<system>continuum</system>
<url>http://contnuum/</url>
</ciManagement>
・・・・
</project>
dependencies / dependency-convergence / dependency-management
依存ライブラリについてのレポート。pom.xml
<project>
・・・・
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.5</version>
<scope>test</scope>
</dependency>
・・・・
</dependencies>
・・・・
</project>
issue-tracking
Issue Tracking System (課題追跡システム : Bugzillaやtracなど) についてのレポート。pom.xml
<project>
・・・・
<issueManagement>
<system>trac</system>
<url>http://trac/</url>
</issueManagement>
・・・・
</project>
license
成果物のライセンスについてのレポート。pom.xml
<project>
・・・・
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
・・・・
</project>
mailing-list
開発者向けやユーザー向けのメーリングリストについてのレポート。pom.xml
<project>
・・・・
<mailingLists>
<mailingList>
<name>user-ml</name>
<subscribe>http://example.org/user-ml/subscribe/</subscribe>
<unsubscribe>http://example.org/user-ml/unsubscribe/</unsubscribe>
<post>user-ml@example.org</post>
<archive>http://example.org/user-ml/archive/</archive>
</mailingList>
・・・・
</mailingLists>
・・・・
</project>
project-team
プロジェクトチームについてのレポート。contributorは、直接開発を行っているわけではないけど、アドバイスや不具合報告などによって貢献している人に関する情報です。
pom.xml
<project>
・・・・
<developers>
<developer>
<id>ueshin</id>
<name>Takuya Ueshin</name>
<email>ueshin@happy-camper.st</email>
<url>http://ueshin.happy-camper.st/</url>
<organization>Happy-Camper Street</organization>
<timezone>+9</timezone>
</developer>
・・・・
</developers>
<contributors>
<contributor>
<id>ueshin</id>
<name>Takuya Ueshin</name>
<email>ueshin@happy-camper.st</email>
<url>http://ueshin.happy-camper.st/</url>
<organization>Happy-Camper Street</organization>
<timezone>+9</timezone>
</contributor>
・・・・
</contributors>
・・・・
</project>
plugins / plugin-management
プロジェクトのビルドやレポートの生成に利用しているMaven2プラグインについてのレポート。pom.xml
<project>
・・・・
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
</plugin>
・・・・
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
・・・・
</plugins>
</build>
・・・・
</project>
scm
Source Code Management (ソースコード管理システム : CVSやSubversionなど) についてのレポート。pom.xml
<project>
・・・・
<scm>
<connection>scm:svn:http://example.org/svn/trunk</connection>
<developerConnection>scm:svn:https://example.org/svn/trunk</developerConnection>
<url>http://example.org/trac/browser/trunk</url>
</scm>
・・・・
</project>
summary
プロジェクトの簡単なまとめを表示するレポート。pom.xml
<project>
・・・・
<name>sample project</name>
<url>http://example.org/</url>
<organization>
<name>Example Organization</name>
<url>http://example.org/</url>
</organization>
・・・・
</project>
おまけ
生成されたサイトの各ページに開発開始年が表示されます。こちらも表示しておいた方がいいでしょう。
pom.xml
<project>
・・・・
<inceptionYear>2008</inceptionYear>
・・・・
</project>
レポート用のMaven2プラグイン
基本情報以外の情報を、Maven2プラグインを利用することで出力することができます。ここでは開発時に特に役に立ちそうなプラグインを紹介します。
なお、以下の設定例では、pom.xmlファイルのproject/reporting/plugins内に記述するものとします。
(
maven-project-info-reports-plugin
に並べて書くことになります。)maven-javadoc-plugin
JavaDocを出力するプラグイン。詳細はMaven 2 Javadoc Pluginを参照。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<charset>UTF-8</charset>
</configuration>
</plugin>
maven-jxr-plugin
Javaソースコードを、カラーリングしてJavaDoc風のインターフェイスで出力するプラグイン。詳細はMaven 2 JXR Pluginを参照。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId>
<configuration>
<inputEncoding>UTF-8</inputEncoding>
<outputEncoding>UTF-8</outputEncoding>
</configuration>
</plugin>
maven-surefire-report-plugin
テスト結果をまとめて出力するプラグイン。詳細はMaven 2 Surefire Report Pluginを参照。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<reportSets>
<reportSet>
<reports>
<report>report-only</report>
</reports>
</reportSet>
</reportSets>
</plugin>
cobertura-maven-plugin
テスト網羅率をまとめて出力するプラグイン。詳細はCobertura Maven Pluginを参照。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
</plugin>
サイトの公開
生成されたサイトをWebサーバーにアップして公開することができます。アップ先をpom.xmlで設定することでmvnコマンドがデプロイしてくれます。
例えば、前回のsample-jarのプロジェクトサイトをデプロイするための設定は、
pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>st.happy_camper.sample</groupId>
<artifactId>sample-jar</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<distributionManagement>
<site>
<id>maven.repository</id>
<name>Sample Project Site</name>
<url>scp://maven.repository/path/to/public_html</url>
</site>
</distributionManagement>
</project>
とし、
$ mvn site-deploy
でデプロイが完了します。
(事前にsiteフェーズまで実行しておく必要があります。)