Mojoって何?

Maven2のソースコードを読んでるとそこかしこに"Mojo"という単語を見かけます。これは一体何なのでしょうか。

maven-core/docs/apt/mojos.apt

の記述によると、MojoとはMaven java objectsのことなのだそうです。"Mojo"の最初の"o"はどっから湧いて出たんだ!と突っ込みたくなりますが、誤解を恐れずにものすごく平たく言うと、一つのゴールを実行する責務を負うJavaオブジェクトというくらいの位置付けの様です。(間違ってたらご指摘ください)
例えば、maven jar pluginは

AbstarctJarMojo.java
JarMojo.java
JarDeployMojo.java
JarInstallMojo.java

という4つのJavaファイルから構成されています。AbstractJarMojoは抽象クラスなので、実質3つのMojoですね。そして、JarMojoはjarというゴールを実行するという具合にMojoとゴールは1対1の関係にあります。ですから、Maven2のプラグインはMojoのかたまりといえると思います。

面白いのは、個々のMojoが自分担当するゴールに関するメタデータをXDoclet風のJavaDocタグの形で保持しているという事です。
例えば、JarMojoのクラスコメントは以下のようになっています。
/**
* @goal jar
*
* @description build a jar
*
* @prereq surefire:test
* @prereq resources:resources
*
* @parameter
* name="jarName"
* type="String"
* required="true"
* validator=""
* expression="#maven.final.name"
* description=""
* @parameter
* name="outputDirectory"
* type="String"
* required="true"
* validator=""
* expression="#project.build.directory"
* description=""
* @parameter
* name="basedir"
* type="String"
* required="true"
* validator=""
* expression="#project.build.output"
* description=""
*
* @author <a href="michal@codehaus">Michal Maczka</a>
* @version $Id: JarMojo.java,v 1.10 2004/07/07 07:18:10 evenisse Exp $
*/
public class JarMojo extends AbstractJarMojo

見れば一目瞭然、ゴールの名前、説明、パラメータの名前、型、説明、パラメータが必須かどうか等の情報が書かれています。
これらの情報はmaven plugin plugin を使ってプラグインをビルドする時に、プラグインのjarのMETA-INF/maven/plugin.xmlの中に書き込まれます(多分ここでQDoxを使っているのでしょう)。
そしてこの情報はorg.apache.maven.Mavenインターフェースを経由して取得できます。これはeclipseなどのIDEにMavenを組み込む時にとても便利そうです。

JavaDocタグとして記述される情報の中で注目したいのが、@parameterにくっついている"expression"です。
ここでプログラム中から参照されるパラメータ名と実際に使用されるオブジェクトを紐づけています。V1ではプラグインのパラメータはほとんど全てシステムプロパティに設定されていましたが、Maven2では"expression"に指定された評価式をベースにOGNLを使用して取得されます。
OgnlProjectValueExtractorというクラスがOGNLを使って値をとってくる役目を担っています。

Mojoに関してはmaven2のメインのCVSにあるものの他にCodehausの中でもいくつか開発が進められているものがあるようです。
(http://cvs.mojo.codehaus.org/からソースが見れます。まだ準備中みたいですが、http://mojo.codehaus.org/というのもあります)
コメント ( 0 ) | Trackback ( 1 )
« テストケース vs DbC Agile Management... »
 
コメント
 
コメントはありません。
コメントを投稿する
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。
数字4桁を入力し、投稿ボタンを押してください。
 
この記事のトラックバック Ping-URL
 
 
・このブログへのリンクがない記事からのトラックバックは受け取らないよう設定されております
※ブログ管理者のみ、編集画面で設定の変更が可能です。
 
 
MOJO (Maven Java Objects) (角谷HTML化計画)
POJOの向こうを張って、ということなのだろうか? ネーミングに乾杯、である。Oなんて飾りです。読み方はもちろん「モゥジョゥ」で決まり(POJOの読み方に同じ)。