Mavenを利用したMuleアプリケーションの開発手順を紹介します。

事前に次の環境が構築されていることを前提とします。

  • Java SE 1.5以上
  • Apache Maven 2以上
  • インターネットに接続できる環境

Mavenの設定

MavenでMuleアプリケーションを作成するには、Mavenのarchetype (project wizard)を利用します。Mavenのarchetypeを利用するには、Mavenのsettings.xml(通常はホームディレクトリの.m2/に作成する)に次の設定を追加します。

~/.m2/settings.xml
<settings>
  ...
  <pluginGroups>
    <pluginGroup>org.mule.tools</pluginGroup>
  </pluginGroups>
  ...
</settings>

プロジェクトの作成

次のコマンドを実行すると、MuleアプリケーションのMavenプロジェクトが作成されます。

$ mvn mule-project-archetype:create -DartifactId=HelloApp -DmuleVersion=3.1.2

このプロジェクトの作成は対話形式で行われ、次のポイントで入力を求められますが、ひとまずデフォルト値でよいでしょう。

  • [INFO] description:
  • [INFO] muleVersion:
  • [INFO] package:
  • [INFO] transports:
  • [INFO] modules:

正常にプロジェクトが作成されると「[INFO] BUILD SUCCESS」を含むテキストが画面に表示されます。

プロジェクト作成の際に実行したコマンドに含まれる -D〜 は、プロジェクトを作成する際のパラメータを定義しています。次に代表的なパラメータについて補足します。

  • artifactId
    必須です。MavenプロジェクトのArtifact IDを定義します。
  • muleVersion
    必須です。Mule ESBのバージョンを定義します。
  • description [Dedault: ]
    Mavenプロジェクトの概要説明を定義します。
  • package [Dedault: ]
    ベースになるパッケージを定義します。MavenプロジェクトのGroup IDになるのでちゃんと定義した方が良いでしょう。
    e.g. com/company/mule/apps
  • transports [Dedault: file,http,jdbc,jms,vm]
    Muleで利用するトランスポートを次から選択して指定します。分からなければ、デフォルトでOKです。
    ajax, ejb, file, ftp, http, https, imap, imaps, jbpm, jdbc, jetty, jetty-ssl, jms, jnp, multicast, pop3, pop3s, quartz, rmi, servlet, smtp, smtps, ssl, tls, stdio, tcp, udp, vm, xmpp
  • modules [default: client,cxf,management,scripting,sxc,xml]
    Muleで利用するモジュールを次から選択して指定します。分からなければ、デフォルトでOKです。
    acegi, annotations, atom, boot, builders, client, cxf, guice, ibeans, jaas, jbossts, jersey, json, management, ognl, pgp, rss, scripting, spring-extras, spring-security, sxc, ws, xml
  • interactive [default: true]
    MuleアプリケーションのMavenプロジェクトの作成時に、対話形式で作成するかどうかを定義します。対話形式での定義の変更が必要でなければ、falseで定義すると良いでしょう。

プロジェクトのビルド

Mavenプロジェクトをビルドするには、プロジェクトディレクトリに移動し、次のコマンドを実行します。

$ mvn package

ビルドの際、テストの実行を意図的にスキップしたい場合は、次のように実行します。

$ mvn -DskipTests package
ビルド時にテストで失敗する場合は、プロジェクト内の次のファイル中の<vm:outbound-endpoint>をコメントアウトして再実行して下さい。
src/test/resources/helloapp-functional-test-config.xml
<mule>
  ...
  <!--
    TODO: You can define a test configuration here then from the HelloTestCase you can fire events into
    Mule (using the MuleClient) and then assert the results.
    -->
  <flow name="main">
    <vm:inbound-endpoint path="in" exchange-pattern="request-response"/>
    <!-- TODO add your service component here. This can also be a Spring bean using <spring-object bean="name"/> -->
    <test:component appendString=" Received"/>
    
    <vm:outbound-endpoint path="out"/><!-- ここをコメントアウトする -->
  </flow>
</mule>
ツールのbugっぽいが、実際にはこのファイルをそのまま使うことはまずないと思われるので問題は無いハズ・・・。雰囲気だけ味わって下さい ^^;

Muleアプリケーションのデプロイ

プロジェクトのビルドを行うことで、targetディレクトリにZIPファイルが作成されます。Muleを開始している状態で、このZIPファイルを$MULE_HOME/appsディレクトリにコピーすることで、Muleアプリケーションをデプロイすることが出来ます。または、次のコマンドでもデプロイすることが出来ます。

$ mvn install
mvn installでデプロイするには、Mule ESBのインストール先のディレクトリを環境変数(MULE_HOME)としてあらかじめ定義しておく必要があります。