EclipseのWTPでApache Ivy v.s m2eclipseその1 - 最近のm2eclipse

さて。

最近はどうか知りませんが、EclipseWTPの動的プロジェクトでmavenを使うと、

等々、色々微妙なところがありました。そこで、先日の日記にも書いた通り、ivyを試してみようかと思った訳なのですが。

ここのm2eclipseのリリースノートっぽいサイトを見るに、ちょうど「Mavenはビルドに適したツールか?」←この議論があった後くらいにm2eclipseのバージョンが0.0.13から0.2にジャンプアップして、その後1ヶ月もたたないうちに0.9まで大幅にジャンプアップして、現在では0.9.5なんて1.0間近までアップしているでは無いですか。

アヤシい

くらいのバージョンアップの早さですが、議論で叩かれたのでついに本気になったのかもしれません。そんな訳で、せっかくなので、大幅バージョンアップしたm2eclipseとivyを両方試してみたいと思います。

では、まずm2eclipseから。以下にアップデートサイトがあるみたいなので、そこからインストールします。

ガニメデになって微妙に「ソフトウェアの更新」のユーザーインターフェースが変わったのでちょっと戸惑いましたけど、とりあえずインストールできました。どうでもいいけど、「更新を反映するにはシステムの再起動が必要です。」というメッセージが表示されるのは微妙ですね。実際に再起動されたのはeclipseで、多分eclipseが再起動されるんだろうとは思いましたが、「もしかしたらOSごと再起動するのかも?」という恐怖感(?)は拭えません。eclipseそのものが悪いのか、pleiadesが悪いのかは分かりませんが。

さらに、「Maven SCM handler for Subclipse」なんてオプションがあるのも微妙に気になります。将来的にはSubversiveが標準になってデフォルトバンドルされるようになり、Subclipseは要らない子になるとかいう話はどうなったのでしょう。この辺のツール間の統一感の無さ加減がまたいかにもeclipseっぽくて素敵ですけど。一方、「Maven Integration for WTP」なんてオプションにはwktk感がそそられます。

さて。

再起動すると、予想通りメニューバーから「ファイル→新規→プロジェクト」で、mavenプロジェクトが作成できるようになっているので、とりあえず以下の手順で「Maven Project」を作成してみます。

  1. 最初の画面(Select project name and location)はとりあえず何も変更せずに「次へ」をクリック
  2. 二番目の画面(Select an Archetype)は、「Artifact Id」が「maven-archetype-webapp」のものを選択して「次へ」をクリック
  3. 三番目の画面(Enter an artifact ID)は、適当に入力して「終了」をクリック。
    1. とりあえずここでは、
      1. グループID:org.chiba
      2. アーティファクトID:m2eclipse_test
      3. バージョン:0.0.1
      4. パッケージ:org.chiba
    2. にしてみます。

最初の画面とか何をしていいのか微妙に良く分からんオプションとかありますが、まぁまぁそんなに難しくありません。

しかも

この時点で既に何もしなくてもWTPの「動的Webプロジェクト」としても認識されています。動的Webモジュールのバージョンが2.3、JDKのバージョンが1.4と今時にしては低めのデフォルト設定なのが気になりますが、ここまではなかなか悪くありません。

あえて気になるといえば、m2eclipse関連のメニューなりなんなりは

pleiadesを入れていても全く日本語化されない

ところが凶悪(?)なところですが、そこもまぁよしとします。src/main/resourcesがあってsrc/main/javaが無いのも、まぁmaven側のミス仕様だと思うのでそれもよしとします。

では続いて、ライブラリを追加してみたいと思います。とりあえず、ここではStruts 1.3を追加してみます。

  1. プロジェクトを右クリックしてコンテキストメニューを表示
  2. 「m2 Maven→依存関係の追加」をクリック
  3. 「Enter groupId, (略)」のところに「struts」と入力
  4. 検索結果の中から「org.apache.struts struts-core」を選択し、バージョンは「1.3.9」のスコープは「compile」を選択
  5. 「OK」をクリック

なんかちょいちょいエラー出ましたが、とりあえずダウンロードには成功。

続いて、こんな感じで実行してみたいと思います。

  1. web.xmlにいつものstrutsの設定を追加
	<servlet>
		<servlet-name>action</servlet-name>
		<servlet-class> org.apache.struts.action.ActionServlet 
		</servlet-class>
		<init-param>
			<param-name>config</param-name>
			<param-value>/WEB-INF/struts-config.xml</param-value>
		</init-param>
		<init-param>
			<param-name>chainConfig</param-name>
			<param-value>/WEB-INF/chain-config.xml</param-value>
		</init-param>
		<load-on-startup>2</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
  1. chain-config.xmlstruts-core-1.3.9.jarから取り出してWEB-INF/下にコピー
  2. 以下のようなstruts-config.xmlをWEB-INF/下に作成
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
        "http://struts.apache.org/dtds/struts-config_1_3.dtd">
        <struts-config>
                <!-- アクションフォーム -->
                <form-beans>
                </form-beans>

                <!-- アクションマッピング -->
                <action-mappings>
                        <action path="/welcome" type="org.chiba.ForwardAction">
                                <forward name="success" path="/index.jsp" />
                        </action>
        </action-mappings>
</struts-config>
  • 以下のようなフォワードするだけのアクションを作成
package org.chiba;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class ForwardAction extends Action {
    public ActionForward execute(ActionMapping mapping, 
                                                          ActionForm form, 
                                                          HttpServletRequest request, 
                                                          HttpServletResponse response) throws Exception {
    	return mapping.findForward("success");
    }
}
  • WTP経由でTomcat6上で実行


おぉぉっぉおsぉうおぉぅっぉおっぉぉぉうぉっっぉぅお!!

なんか問題なく動いていますね。WEB-INF/libの下に無くても、ちゃんとstruts-core-1.3.9.jarを認識しています。かつてとは大違いです。しかも、NetBeansと違ってプロジェクトが完全にmavenに統合されている訳ではないので、テストケースの単独実行も楽そうです*1

ちょいちょい不安定なところはありましたが、意外と悪く無さそうな・・・1.0には期待できそうです。

では続いてIvyは・・・その2で書きますーー;。

*1: NetBeansの場合は、テストケースを実行する場合はmavenSurefire Pluginを通して実行されるので微妙に実行に時間がかかったりとかしたり。