[HOME]: [Mac OS X]: [MacPython]: [Emacs]: [生存報告記]: [MacEmacs JP Project]: [NTEmacs JP Project]:

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/

インストール

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

参考サイト

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

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

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

参考

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 Abilify Acarbose Achromycin Aciphex Actos Acyclovir Adalat Adapalene Advair Diskus Inhaler Albuterol Alendronate Allegra ALLEGRA D Allopurinol Altace Amitriptyline Amlodipine Amlodipine Besylate Amoxil Ampicillin Ansaid Arava Atenolol Atorvastatin Avandia Azithromycin Bactrim Bactroban Bextra Biaxin Calan Cardura Carisoprodol Carvedilol Ceclor Celebrex Celecoxib Celexa Cephalexin Cialis Cilostazol Cimetidine Cipro Ciprofloxacin Cisapride Clarinex Claritin Cleocin Clindamycin Clobetasol Clomid Clotrimazole Coumadin Cozaar Cutivate Cycrin Cytotec Danozol Desyrel Diclofenac Differin Diflucan Dilantin Dimenhydrinate Ditropan Doxycycline Dramamine Effexor Elocon Enalapril Erythromycin Esidrex Esomeprazole Estrace Estradiol Evista Famotidine Feldene Fexofenadine Fexofenadine + Pseudoephedrine Finasteride Flagyl FLomax Flonase Flovent Floxin Fluconazole Fluoxetine Hydrochloride Flutivate Fosamax Frusemide Gemfibrozil Glibenclamide Glucophage GLUCOPHAGE XR Glucotrol Glucovance Glyburide GLYBURIDE+METFORMIN HYDROCHLORIDE Gravol Hydrochlorothiazide Hytrin Ilosone Imitrex Inderal Indocin Isordil Isosorbide Itraconazole K-Dur Keflex Ketoconazole Lamisil Lamisil Cream Lanoxin Lansoprazole Lasix Latanoprost Levaquin Levitra Levofloxacin Levothroid Levoxyl Lipitor Lisinopril Lopid Lopressor Loratadine Lotensin Lotrel Lotrel Lotrimin Macrobit Macrodantin Meridia Metformin Metoprolol Metronidazole Miconazole Misoprostol Mobic Moduretic Monistat Motrin Naprosyn Neurontin Nexium Nimesulide Nizoral Nolvadex Norvasc Ocuflox Ovral - G Ovral - L Oxybutynin Panadol Paxil Pepcid Phenergan Pioglitazone Piroxicam Plavix Pletal Pravachol Precose Prednisolone Premarin Premphase Premphase Cycle Prevacid Prevacid Prilosec Promethazine Propecia Propranolol Propranolol Propulsid Protonix Provera Prozac Rabeprazole Ramipril Ranitidine Retin-A Risperdal Rofecoxib Sertraline HCL Sibutramine Sildenafil Citrate Simvastatin Singulair Soma Sporanox Synthroid Tadalafil Tagamet Tamoxifen Temovate Tenormin