Maven3, Jetty8, Eclipse 3.7(Indigo), m2eclipse 前提
mvn archetype:generate
で、org.codehaus.mojo.archetype:webapp-xxyy でプロジェクト作成。バージョンは適当に選ぶ。今回はwebapp-jee5を選択。
340: remote -> org.codehaus.mojo.archetypes:webapp-j2ee13 (-) 341: remote -> org.codehaus.mojo.archetypes:webapp-j2ee14 (-) 342: remote -> org.codehaus.mojo.archetypes:webapp-javaee6 (-) 343: remote -> org.codehaus.mojo.archetypes:webapp-jee5 (-)
codehausのarchetypeを選択するメリットとしては、src/main/java 以下のパッケージまでが展開されること。org.apache.maven.archetypes:maven-archetype-webappだと src/main/webapp/ までしか作ってくれない。
このあとEclipseで既存のMavenプロジェクトとしてインポートし、適当にServletクラス作成して、web.xmlに適当に登録する。
プロジェクト右クリックで Maven Build みたいなのを選択し、ゴールに "package" を指定して実行すれば target/ の下にwarファイルが作成される。
これを実行するためにTomcatを使うという手法もあるが、今回はJettyを使ってみる。
pom.xmlに上記ドキュメントに指定されたとおりに jetty-maven-plugin を追加し、EclipseでMavenの "jetty:run" ゴールを指定してデバッグ実行する。
ただこれだけだとソースコードが対応付けられていない。Debugパースペクティブを開きJettyのプロセスを右クリック→ "Edit Source Lookup" ソース探索パスを追加する。プロジェクト単位で追加できるし、Workspaceでごっそりと追加することも可能。
これでブレークポイントなどがソースコードと連携し、デバッグしやすくなる。
Maven + Jettyの何がよいかというと、test系と相性が良くなるようなきめ細かい設定が可能となっている。上述のドキュメントでは 「jetty:start : Starting jetty without first executing the build up to "test-compile" phase」のセクションで integration-test の前後で自動的にJettyを起動・停止するような設定例が書かれている。
またTomcat系の独立したWebApplicationServerと異なりwarファイルのデプロイ、それにともなうサーバのセットアップや設定の調整が不要な点も評価できる。
参考:Maven + Tomcatの例