紹介マニアMoinMoin

Maven2

Software Design 2003年12月号の後での追記などもしています。(なかなか更新できてません)

News

2004/07/13: Maven 1.0 Released
2004/05/21: Maven 1.0 RC3 Released
2004/03/24: Maven 1.0 RC2 released
2003/11/18: Software Design 2003年12月号発売
2003/09/30: Maven 1.0 RC1 released
2003/07/15: Maven 1.0 Beta 10 released
2003/02/某: このページ作成日は2月より前のはず、、



概要

Jakartaプロジェクトの一つ。

project object model (POM)に基礎を置いているbuildツールです。

Antと比較して以下のような特徴があります。

という物です。

Mavenで初期状態でいくつかのPlug-inによりGoalが用意されていますので、Antのようにtargetのすべてを記述する必要はありません。

maven war:war

とすればwar Plug-inによりwarが作成されます。

ただし、これはすべてが自動的というわけではなく、Antのbuild.xmlにあたる、project.xmlが必要になります。

しかし、targetを書く必要はないため飛躍的にその記述量は軽減できます。

maven -g

にて利用可能なGoalが一覧表示されます。

buildに必要なJarを(ほぼ)自動的に取得する機能に関しては、取得先を変更する事も可能なので、プロジェクトなどで利用する場合はプロジェクト専用サーバを設置しておくとよいでしょう。

プロジェクト専用サーバの機能としてはWebサーバ機能、CVS、メーリングリスト、Scarabによるtracking System機能をもったサーバを用意すればよいでしょう。またGUMPと連携させるのが強力でよいでしょう。

URL

http://maven.apache.org/

http://maven-plugins.sourceforge.net/

http://wiki.codehaus.org/maven/

http://www.mavenblogs.com/

http://repo1.maven.org/maven2/

天使やカイザーと呼ばれて: maven2のsiteゴールによるレポートの出力

インストール

Maven 1.0 RC2 の仕様を補足中。

ダウンロード

http://maven.apache.org/start/download.html

よりmaven-1.0-rc2をダウンロード。解凍して任意のフォルダにおきます。

インストール

$HOME/.bashrcなどの初期設定ファイルや$HOME/.mavenrc

MAVEN_HOME=解凍したmavenの位置
export MAVEN_HOME

を設定

${MAVEN_HOME}/bin/maven -v

で起動してみます。

バージョン表示が見れたら成功です。

${MAVEN_HOME}/binにPathを通しておくと以後の運用が楽になります。

プロジェクト作成

とりあえずはじめるなら。

maven genapp

以下の4つの質問がでます。

Enter a project template to use: [default]
Please specify an id for your application:  [app]
Please specify a name for your application:  [Example Application]
Please specify the package for your application:  [default.example.app]

デフォルトのままのpackage名だとコンパイル失敗します。ちゃんとpackage名付加してください。

project.xml

project.xml とはAntの build.xml にあたる物です。genappで作成された物を基本に修正する事からはじめると良いでしょう。

http://maven.apache.org/start/integrate.html

http://maven.apache.org/reference/project-descriptor.html

project.xmlの定義は

http://cvs.apache.org/viewcvs.cgi/maven/src/xsd/maven-project.xsd

に存在します。XMLSchemaです。DTDでないので注意してください。

XMLSchemaが読めない場合は以下の画像で理解してください。

http://maven.apache.org/images/project-descriptor.gif(現在行方不明)

かなり最小限のproject.xml

<?xml version="1.0" encoding="UTF-8"?>

<project>
  <id>Testsample</id>
  <name>Sample</name>
  <currentVersion>0.0.1</currentVersion>

  <build>
    <sourceDirectory>src/main</sourceDirectory>
    <unitTestSourceDirectory>src/test</unitTestSourceDirectory>
  </build>

  <dependencies>
    <dependency>
      <id>ant</id>
      <version>1.5.1</version>
    </dependency>

    <dependency>
      <id>junit</id>
      <version>3.8.1</version>
    </dependency>
  </dependencies>

</project>

利用方法

Maven User Guide に記述がある。

ここではUser Guideより重要な部分を抜粋して記述する。

設定ファイル

Properties Processingの項に説明がある。

${maven.home}/bin/driver.properties
${project.home}/project.properties
${project.home}/build.properties
${user.home}/build.properties

最後に読み込んだファイルの設定が優先されます。

Repository

RepositoryというのはMavenがJarをダウンロードする位置です。Mavenは利用するJarを(ほぼ)自動的に取得します。

Repositoryの位置は

maven.repo.local

の設定をpropertiesファイルに記述する事で指定可能です。デフォルトでは、

${MAVEN_HOME}/repository

になります。

依存関係

開発において各種Jarを利用しますが、そのバージョンをDependenciesとしてproject.xml内に規定できます。

<dependencies>
  <dependency>
    <id>ant</id>
    <version>1.5.1</version>
  </dependency>
</dependencies>

以上の場合はant1.5.1を利用するという事になります。

プロジェクトWeb

maven site:generate

で作成する事が可能です。

warの作成

http://maven.apache.org/reference/plugins/war/properties.html

を参考にpropertyを設定します。

一部の動作がまだ不便です。

Plug-in

各機能はPlug-inにより実装されています。Plug-inの動作もpropertiesファイル内で設定できます。

Plug-inの設定可能なpropertiesは以下を参照してください。

http://maven.apache.org/reference/plugins/index.html

Plug-in作成手順

プラグインを作成する場合は既存のプラグインを参照するのが現状ではもっとも早いでしょう。

plugin.jellyというファイルがほとんどの場合中心です。

Jellyのドキュメントは以下にあります。

JakartaJelly

Jakartaの杜JakartaJelly翻訳

GUMPとの連携

まだ記載してません。

Scarabとの連携

設定により自動連携が可能です。

Maven FAQ

XDocletとの連携

http://orinoco.flamefew.net/moatas/archives/000115.html

注:Maven 1.0-Beta9での問題の解決法

http://nagoya.apache.org/wiki/apachewiki.cgi?BrokenManifestInBeta9

参考サイト

Maven 2

Get the most out of Maven 2 site generation

http://homepage2.nifty.com/ymagic/javaworld/

http://www-6.ibm.com/jp/developerworks/java/030613/j_j-maven.html

http://www.ingrid.org/jajakarta/turbine/jp/turbine/maven/

http://www.02.246.ne.jp/~torutk/maven/

http://www.javaworld.com/javaworld/jw-10-2002/jw-1011-maven.html

http://ko.meadowy.net/~koichiro/diary/20030520.html#p02

プログラミング・開発者・ソースコード CodeZine:Mavenを利用してオールインワンのプロジェクト環境を構築する(Java, ビルドツール, プロジェクト管理, XML)

http://radio.weblogs.com/0112098/stories/2003/02/12/usingEclipseAndMaven.html

http://www.sunicom.co.jp/support/maven/

mvnRegistry

Mergere:Maven2、Continuumについて書かれたフリーのPDF書籍

CodeZine:Apache MavenによるJavaプロジェクトポータビリティの向上(Maven, Apache, POM, ビルド, ライフサイクル管理)

参考

project.xmlのDTD(注:このDTDは不完全です)

<!--
    Maven Project Descriptor Doctype Declaration
-->

<!ELEMENT project
  (extend?, pomVersion, id, name, groupId?, currentVersion, organization,
   inceptionYear, package?, logo?, gumpRepositoryId?, description?,
   shortDescription, url?, issueTrackingUrl?, siteAddress?, siteDirectory?,
   distributionDirectory?, repository?, versions?, branches?, mailingLists?,
   developers, contributors?, dependencies?, build, reports?)
>

<!ELEMENT extend (#PCDATA)>
<!ELEMENT pomVersion (#PCDATA)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT groupId (#PCDATA)>
<!ELEMENT currentVersion (#PCDATA)>
<!ELEMENT organization (name, url?, logo?)>
<!ELEMENT inceptionYear (#PCDATA)>
<!ELEMENT package (#PCDATA)>
<!ELEMENT logo (#PCDATA)>
<!ELEMENT gumpRepositoryId (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT shortDescription (#PCDATA)>
<!ELEMENT url (#PCDATA)>
<!ELEMENT issueTrackingUrl (#PCDATA)>
<!ELEMENT siteAddress (#PCDATA)>
<!ELEMENT siteDirectory (#PCDATA)>
<!ELEMENT distributionDirectory (#PCDATA)>
<!ELEMENT repository (#PCDATA)>
<!ELEMENT versions (#PCDATA)>
<!ELEMENT branches (branch*)>
<!ELEMENT mailingLists (mailingList*)>
<!ELEMENT developers (developer*)>
<!ELEMENT contributors (contributor*)>
<!ELEMENT dependencies (dependency*)>
<!ELEMENT build
          (nagEmailAddress?,
          sourceDirectory?,
          unitTestSourceDirectory?,
          integrationUnitTestSourceDirectory?,
          aspectSourceDirectory?,
          unitTest?,
          integrationUnitTest?,
          resources?)
>
<!ELEMENT reports (report*)>

<!--                    brances                                    -->
<!ELEMENT branch (tag)>
<!ELEMENT tag (#PCDATA)>

<!--                    mailingLists                               -->
<!ELEMENT mailingList (name, subscribe, unsubscribe, archive?)>
<!ELEMENT subscribe (#PCDATA)>
<!ELEMENT unsubscribe (#PCDATA)>
<!ELEMENT archive (#PCDATA)>

<!--                    developers                                 -->
<!ELEMENT developer (name, id, email, organization?, roles?, url?)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT organization (#PCDATA)>
<!ELEMENT roles (role*)>
<!ELEMENT role (#PCDATA)>

<!--                    contributors                               -->
<!ELEMENT contributor (name, email?, organization?, roles?, url?)>

<!--                    dependencies                               -->
<!ELEMENT dependency (id?, groupId?, artifactId?, version?,
          jar?, type?, url?)>
<!ELEMENT type (#PCDATA)>
<!ELEMENT jar (#PCDATA)>

<!--                    build                                      -->
<!ELEMENT nagEmailAddress (#PCDATA)>
<!ELEMENT sourceDirectory (#PCDATA)>
<!ELEMENT unitTestSourceDirectory (#PCDATA)>
<!ELEMENT integrationUnitTestSourceDirectory (#PCDATA)>
<!ELEMENT aspectSourceDirectory (#PCDATA)>
<!ELEMENT unitTest (includes*, excludes*)>
<!ELEMENT integrationUnitTest (includes*, excludes*)>
<!ELEMENT resources (resource*)>

<!--                    unitTest                                   -->
<!ELEMENT includes (include*)>
<!ELEMENT include (#PCDATA)>
<!ELEMENT excludes (exclude*)>
<!ELEMENT exclude (#PCDATA)>

<!--                    resources                                  -->
<!ELEMENT resource (directory?, targetPath?, includes*, excludes*)>
<!ELEMENT directory (#PCDATA)>
<!ELEMENT targetPath (#PCDATA)>

<!--                    reports                                    -->
<!ELEMENT report (#PCDATA)>


CategoryJava

紹介マニアMoinMoin: Maven (last edited 2010-02-05 02:55:34 by sakito)